Ответ 1
Если вы хотите установить значение в области видимости, но не знаете имя свойства (раньше времени), вы можете использовать синтаксис object[property]
:
scope[attrs.myNgDirective] = 'newValue';
Если строка в атрибуте содержит точку (например, myObject.myProperty
), это не сработает; вы можете использовать $eval
для выполнения задания:
// like calling "myscopevalue = 'newValue'"
scope.$eval(attrs.myNgDirective + " = 'newValue'");
[Обновление: вам следует использовать $parse
вместо $eval
. См. Отметьте ответ.]
Если вы используете область выделения, вы можете использовать аннотацию =
:
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';
}
}
});
Вы можете увидеть пример этого в этот пример Angular/jQuery color picker JSFiddle, где присвоение scope.color
внутри директива автоматически обновляет переменную, переданную в директиву по области управления.