Se si desidera impostare un valore sul campo di applicazione, ma non si conosce il nome della proprietà (in anticipo), è possibile utilizzare la sintassi object[property]
:
scope[attrs.myNgDirective] = 'newValue';
Se la stringa in l'attributo contiene un punto (es. myObject.myProperty
), questo non funzionerà; è possibile utilizzare $eval
per fare un incarico:
// like calling "myscopevalue = 'newValue'"
scope.$eval(attrs.myNgDirective + " = 'newValue'");
[Aggiornamento: Si dovrebbe davvero usare $parse
invece di $eval
. . Vedere Mark's answer]
Se stai usando un ambito isolato, è possibile utilizzare il =
della nota:
app.directive('ngMyDirective', function() {
return {
scope: {
theValue: '=ngMyDirective'
},
link: function(scope, element, attrs) {
// will automatically change parent scope value
// associated by the variable name given to `attrs.ngMyDirective`
scope.theValue = 'newValue';
}
}
});
Si può vedere un esempio di questo in this Angular/jQuery color picker JSFiddle example, dove assegnando a scope.color
all'interno della direttiva aggiorna automaticamente la variabile ha superato in la direttiva sull'ambito del controller.
fonte
2013-05-11 06:29:11
scope [attrs.myNgDirective] = 'newValue'; lavorato! sebbene il valore di myNgDirective debba essere direttamente sull'oscilloscopio, non un sottooggetto dell'oscilloscopio. che ha senso – Anton
Credo che dovresti essere in grado di '$ eval' con un'espressione di assegnazione per la notazione dell'oggetto; Aggiornerò la mia risposta –
sarebbe bello. qualcosa come scope. $ eval (attrs.ngMyDirective = 'nuovo valore')? – Anton