J'ai déclaré deux directives sur un élément: l'une demandant une étendue isolée et l'autre demandant une étendue héritée. Voici:
Le code
angular.module("myApp", [])
.directive("myDirective", function() {
return {
restrict: "A",
scope: {
users: "="
},
templateUrl: "users-info.html",
link: function(scope) {
scope.title = "From My Directive";
}
}
})
.directive("otherDirective", function() {
return {
restrict: "A",
scope: true,
link: function(scope) {
scope.title = "From Other Directive";
}
};
})
.controller("AppController", function($scope) {
$scope.users = [
{name: "Anup Vasudeva", username: "anup_vasudeva"},
{name: "Ajay Sharma", username: "ajay_sharma"},
{name: "Vinay Kumar", username: "vinay_kumar"}
];
$scope.title = "Users Information";
});
et le HTML
<div my-directive other-directive>{{title}}</div>
Mais AngularJS génère une erreur en mentionnant l’URL:
http://docs.angularjs.org/error/$compile/multidir
Mais dans la description des erreurs, je ne vois pas un point où il est dit que plusieurs directives demandant une portée isolée et héritée ne sont pas autorisées.
** MODIFIER ** Cela semble étrange, quand j'ai utilisé angulaire v1.2.0-rc.2
, le scénario ci-dessus fonctionne bien. le otherDirective
obtient une portée isolée même si elle demande la portée partagée. Mais ce scénario ne fonctionne pas dans la dernière version.
Réponses:
2 pour la réponse № 1Vous obtenez une erreur car vos deux directives demandent une étendue isolée.
Pour résoudre ce problème, définissez l'option de portée sur false pour la directive pour laquelle vous ne voulez pas de portée isolée:
app.directive("otherDirective", function() {
return {
restrict: "A",
scope: false,
link: function(scope) {
scope.title = "From Other Directive";
}
};
});
En fait, vous pouvez également omettre la propriété scope pour le même effet.
0 pour la réponse № 2
AngularJS n'autorise qu'un seul domaine isolé par élément. Si soit si vous faites
scope: true
ou
scope: {/* something */}
dans deux directives sur le même élément, cela signifie simplement que vous demandez deux étendues isolées sur le même élément.
Essayer avec
scope: false
dans otherDirective