AngularJS ng-include не включает представление, если не передано в $scope

Неправильно ли считать, что ngInclude может взять необработанный путь? Я продолжаю пытаться установить ngInclude следующим образом:

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

Это не работает, но если я делаю что-то подобное, он работает.

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

   $scope.template = $scope.templates[0].template;
});

В моем index.html

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

Используется ли ngInclude, кроме значений, выходящих за пределы области видимости? Если да, то почему это так, а не прямая часть частичного html.

Ответ 1

ng-include принимает выражение. Если вы хотите указать явный URL прямо там, вы должны указать строку.

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

Ответ 2

ng-include, как другие директивы (ng-class, ng-src...) оценивает выражение Angular из области видимости. Без кавычек ('') он будет искать переменную области.


Обратите внимание, что вам не нужно указывать атрибут src.

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

Можно переписать на: (что проще)

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

Вы также можете использовать ng-include как элемент :

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