web-dev-qa-db-fra.com

AngularJS ng-include n'inclut pas la vue sauf si passé dans $ scope

Est-il faux de supposer que ngInclude peut prendre un chemin brut? Je continue d'essayer de définir mon ngInclude comme suit:

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

Cela ne fonctionne pas, mais si je fais quelque chose comme ça, ça marche.

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

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

Dans mon index.html

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

Est-ce que ngInclude ne contient que des valeurs hors de la portée? Si c'est le cas, pourquoi est-ce ainsi et non une inclusion directe du code HTML partiel.

121
Chad

ng-include accepte une expression. Si vous voulez spécifier l'URL explicite directement ici, vous devez donner une chaîne.

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

ng-include , comme d’autres directives ( ng-class , ng-src ...) évalue une expression Angular de la portée. Sans guillemets (''), il recherchera une variable de la portée.


Notez qu'il n'est pas nécessaire de spécifier l'attribut src.

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

Peut être réécrit pour: (c'est plus simple)

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

Vous pouvez également utiliser ng-include en tant qu'élément :

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