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.


person Chad    schedule 20.09.2012    source источник


Ответы (2)


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

<div ng-include src="'page.html'"></div>
person Tosh    schedule 20.09.2012
comment
Да только что видел. Примеры, которые я рассматривал, использовали более старую версию angular. - person Chad; 21.09.2012
comment
Потратил много времени сегодня днем, пытаясь понять это. Конечно, конечно это должна быть строка. Это имеет полный смысл. - person Code Whisperer; 16.05.2013
comment
не работает с включенным ngSanitize в модуле приложения. Я ищу решение. - person Dida; 18.09.2013
comment
Еще одна вещь: страница не может иметь символы подчеркивания в качестве имени файла. - person ; 30.09.2013
comment
@muffin можно поподробнее? В моих именах файлов много символов подчеркивания, и они работают нормально. - person toxaq; 30.09.2013
comment
Ну, я потерял около часа из-за чертового подчеркивания в имени файла! Это странно. Я проверил еще раз, и если мое представление имеет подчеркивание в качестве имени файла, оно не появится! значение атрибута src извлекается из области видимости! - person ; 30.09.2013
comment
Маленькие одинарные кавычки решают проблему. Я не мог видеть точное изменение (мой бедный глаз). Пожалуйста, укажите добавление одинарных кавычек внутри двойных кавычек в словах. - person Fizer Khan; 15.10.2013
comment
Для людей, которые могут найти этот ответ для более новых версий Angular... атрибут src применим только в том случае, если вы используете ng-include в качестве элемента, например. <ng-include src="'whatever.html'"></ng-include>. Если вы используете его как атрибут, вам не следует использовать атрибут src, например. <div ng-include="'whatever.html'"></div>. - person Lex; 27.03.2016

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>
person Mistalis    schedule 07.04.2017