Je sais que ng-non-bindable
permet à un élément donné et ses enfants de ne pas être compilés en tant que modèle. Il semble qu'il ait été conçu pour être partagé à travers un modèle au besoin. Existe-t-il un moyen de dire à Angular de ne pas traiter un élément donné, MAIS pour "poke trous" dans cela et permettre la sélection des éléments enfants sélectionnés? Par exemple, j'aimerais pouvoir faire quelque chose comme ça:
<div ng-non-bindable> <div>{{2+2}}</div> <div ng-bindable>{{2+2}}</div> </div>
Et obtenez-le:
{{2 + 2}}
4
- TypeError: Impossible de lire la propriété 'push' de undefined, JavaScript
- Pourquoi cette fonction est-elle exécutée deux fois?
- Ng-repeat inside UL (qui est à l'intérieur d'un P) ne fonctionne pas
- Ng-class ne déclenchera pas sur la directive personnalisée
- Validation de formulaire avec champs dépendants dans AngularJS
Je comprends que ng-non-bindable
n'autoriserait même pas la ng-bindable
à être traité, même s'il existait. Mais existe-t-il quelque chose pour permettre une approche des modèles comme je l'ai exprimé?
Pour être plus approfondi, ma solution idéale ne traiterait pas d'Angular jusqu'à ce que l'on trouve le ng-bindable
, pas seulement les expressions d'accolade. Par exemple:
<div ng-non-bindable> <div ng-repeat="n in [1,2,3]">{{n+2}}</div> <div ng-bindable ng-repeat="n in [1,2,3]">{{n+2}}</div> </div>
Entraînerait:
{{N + 2}}
3
4
5
nonBindable
personnalisée non- nonBindable
Vous ne pourrez pas utiliser ngNonBindable
(bien, vous pouvez le décorer) comme ceci en raison de la façon dont la directive est configurée. Cependant, il est très facile d'écrire une directive personnalisée avec ce comportement:
app.directive('nonBindable', function($compile) { return { terminal: true, priority: 999, compile: function(tElement) { return function(scope) { var bindable = tElement[0].querySelectorAll('[bindable]'); [].forEach.call(bindable, function(el) { $compile(el)(scope); }); }; } }; });
Et utilisez-le comme ceci:
<div non-bindable> <div>{{2+2}}</div> <div bindable>{{2+2}}</div> </div> <br><br> <div non-bindable> <div ng-repeat="n in [1,2,3]">{{n+2}}</div> <div bindable ng-repeat="n in [1,2,3]">{{n+2}}</div> </div>
Demo: http://plnkr.co/edit/NEDP4WkBN4TlXdXKo8WI?p=preview
ngNonBindable
Vous pouvez décorer la directive ngNonBindable
origine comme ceci:
app.config(function($provide) { $provide.decorator('ngNonBindableDirective', function($delegate, $compile) { var directive = $delegate[0]; directive.compile = function(tElement) { return function(scope) { var bindable = tElement[0].querySelectorAll('[bindable]'); [].forEach.call(bindable, function(el) { $compile(el)(scope); }); }; }; return $delegate; }); });
Et l'utiliser de cette façon:
<div ng-non-bindable> <div>{{2+2}}</div> <div bindable>{{2+2}}</div> </div> <br><br> <div ng-non-bindable> <div ng-repeat="n in [1,2,3]">{{n+2}}</div> <div bindable ng-repeat="n in [1,2,3]">{{n+2}}</div> </div>