AngularJS ng-include does not include view unless passed in $scope

AngularjsAngularjs Ng-Include

Angularjs Problem Overview


Is it wrong to assume that ngInclude can take a raw path? I keep trying to set my ngInclude as follows:

<div ng-include src="views/header.html"></div>

This does not work but if I do something like this it does work.

// HeaderController
app.controller('HeaderCtrl', function($scope){
   $scope.templates = {[
     template: { url: 'views/header.html' }
   ]};
   
   $scope.template = $scope.templates[0].template;
});

In my index.html

<div ng-controller="HeaderCtrl">
  <div ng-include src="template.url"></div>
</div>

Does ngInclude only except values off of the scope? If so why is it this way and not a straight include of the html partial.

Angularjs Solutions


Solution 1 - Angularjs

ng-include accepts an expression. If you want to specify the explicit URL directly in there, you have to give a string.

<div ng-include src="'page.html'"></div>

Solution 2 - Angularjs

ng-include, as other directives (ng-class, ng-src ...) evaluates an Angular expression from the scope. Without quotes (''), it will search for a variable of the scope.


Note that you don't have to specify the src attribute.

<div ng-include src="'views/header.html'"></div>

Can be rewritted to: (that is simpler)

<div ng-include="'views/header.html'"></div>

You can also use ng-include as an element:

<ng-include src="'views/header.html'"></ng-include>

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionChadView Question on Stackoverflow
Solution 1 - AngularjsToshView Answer on Stackoverflow
Solution 2 - AngularjsMistalisView Answer on Stackoverflow