templateurl parameter directives directivas custom compile angularjs angularjs-directive angularjs-scope

angularjs - parameter - cómo establecer un valor interpolado en la directiva angular?



scope directive angularjs (2)

¿Cómo configuro el valor interpolado en una directiva? Puedo leer el valor correcto del siguiente código, pero no he podido configurarlo.

js:

app.directive(''ngMyDirective'', function () { return function(scope, element, attrs) { console.log(scope.$eval(attrs.ngMyDirective)); //set the interpolated attrs.ngMyDirective value somehow!!! } });

html:

<div ng-my-directive="myscopevalue"></div>

donde myscopevalue es un valor en el alcance de mi controlador.


Si desea establecer un valor en el alcance pero no conoce el nombre de la propiedad (antes de tiempo), puede usar la sintaxis del object[property] :

scope[attrs.myNgDirective] = ''newValue'';

Si la cadena en el atributo contiene un punto (ej. myObject.myProperty ), esto no funcionará; puedes usar $eval para hacer una tarea:

// like calling "myscopevalue = ''newValue''" scope.$eval(attrs.myNgDirective + " = ''newValue''");

[Actualización: Realmente debería usar $parse lugar de $eval . Ver la respuesta de Mark .]

Si está utilizando un alcance aislado, puede usar la = anotación:

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''; } } });

Puede ver un ejemplo de esto en este ejemplo de selector de color Angular / jQuery JSFiddle , donde la asignación a scope.color dentro de la directiva actualiza automáticamente la variable pasada a la directiva en el alcance del controlador.


Siempre que una directiva no utilice un alcance aislado y especifique una propiedad de ámbito usando un atributo, y desea cambiar el valor de esa propiedad, sugiero usar $ parse . (Creo que la sintaxis es mejor que $ eval''s)

app.directive(''ngMyDirective'', function ($parse) { return function(scope, element, attrs) { var model = $parse(attrs.ngMyDirective); console.log(model(scope)); model.assign(scope,''Anton''); console.log(model(scope)); } });

violín

$parse funciona si el atributo contiene un punto o no.