Изменить 2
Другой вариант - использовать ng-class
или ng-style
для изменения цвета текста. Тогда вам вообще не нужно создавать новую директиву.
Исходный ответ
Я бы вообще не зависел от директивы ng-bind
... На мой взгляд, это намного чище.
<div ng-bind="someModel" my-directive="someModel"></div>
А затем определите свою директиву как ...
angular.module('myApp').directive('myDirective', function() {
return {
link: function(scope, element, attrs) {
scope.$watch(attrs.myDirective, function(newValue, oldValue) {
// Your Code here...
});
}
};
});
Таким образом, вы можете использовать свою директиву, даже если у вас нет ng-bind
в элементе (например, если вместо этого вы используете фигурные скобки).
<div my-directive="someModel">{{someModel}}</div>
В качестве альтернативы вы можете использовать attrs.$observe(...)
(документацию). из scope.$watch(...)
.
<div ng-bind="someModel" my-directive="{{someModel}}"></div>
а также
angular.module('myApp').directive('myDirective', function() {
return {
link: function(scope, element, attrs) {
attrs.$observe('myDirective', function(interpolatedValue) {
// Your Code here...
});
}
};
});
Дополнительную информацию о различиях между scope.$watch(...)
и attrs.$observe()
можно найти здесь.
Изменить
Учитывая, что ваша директива в основном изменяет DOM после директивы ng-bind
, почему бы не пропустить ng-bind
все вместе?
<div my-directive="{{someModel}}"></div>
а также
angular.module('myApp').directive('myDirective', function() {
return {
link: function(scope, element, attrs) {
attrs.$observe('myDirective', function(interpolatedValue) {
if (interpolatedValue) {
// Modify interpolatedValue if necessary...
}
element.text(interpolatedValue == undefined ? '' : interpolatedValue);
});
}
};
});
person
rtcherry
schedule
11.01.2014
$timeout
часть моего кода, чтобы он оценил следующий цикл дайджеста, когда произошло связывание. Я не совсем доволен этим решением, но, возможно, его хватит для ваших нужд. - person towr   schedule 12.01.2014priority: 1
в свою директиву? просто из любопытства, может, это действительно так просто? - person Matt Greer   schedule 12.01.2014