Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Inline `ng-template` not found by `ng-include`

I have a view being loaded with an embedded text/ng-template which is not being found by a ng-include later in the file. The script block sits at the very top of the view file:

<script type="text/ng-template" id="stringCondition">
    <!-- template guts -->
</script>

Which I am loading later in the file with:

<ng-include src="'stringCondition'"></ng-include>

But is producing a 404 error in the console:

GET http://localhost/~me/stringCondition 404 (Not Found)

I've tried several variants on naming (like having .html on the end) and using ng-include as an attribute instead of the high level element. All with no luck.

What could be causing an embedded ng-template to not be registering with an ng-include in the same view file?

UPDATE:

As comments and answers have pointed out, the basic design of my code is correct. But something is causing ng-template to (apparently) fail to make the template available to the system.

I updated my code to pull from a HTML file (instead of an imbedded template) and it works fine.

Is there a common situation that I could be running into that breaks ng-template?

like image 201
Nicholas Pappas Avatar asked Mar 20 '15 17:03

Nicholas Pappas


2 Answers

<div ng-app>
  <script type="text/ng-template" id="stringCondition">
     Yes, yes it did.
  </script>
  Did it work? <ng-include src="'stringCondition'"></ng-include>
</div>

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

I had the same problem and came upon this post. I can now see what is causing this issue so hopefully this is helps anyone else with this issue.

The reason rgthree's code works is that the script tag for text/ng-template has to live within the scope of ng-app. So it is fine to have the template in a seperate .js file but just make sure when it is rendered on the HTML page it is within ng-app, otherwise angular won't be aware of it and will attempt to load it from the server.

like image 193
daniellepelley Avatar answered Sep 30 '22 14:09

daniellepelley


Seems to work fine for me. Perhaps you have something else going on outside of your example code.

<div ng-app>
  <script type="text/ng-template" id="stringCondition">
     Yes, yes it did.
  </script>
  Did it work? <ng-include src="'stringCondition'"></ng-include>
</div>

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
like image 39
rgthree Avatar answered Sep 30 '22 13:09

rgthree