<a custom-attr='{{ controller.object.value }}' data-ng-model='controller.object.value'>
.directive('customAttr', function () {
return {
require: 'ngModel',
controller: 'ControllerName',
controllerAs: 'cName',
link: function (scope, el, attr, ctrl) {
el.on('click', function ($event) {
if (ctrl.$viewValue && attr.customAttr) { // breakpoint
}
})
}
}
})
чтобы увидеть правильное значение в attr.customAttr
при первом attr.customAttr
директивы.
Остановившись в точке останова в выражении if внутри функции директивной ссылки, я ожидаю увидеть логическое значение. Я проверил логическое значение в модели с использованием $log.log()
. К сожалению, при первом attr.customAttr
директивы attr.customAttr
оценивает строку ссылки на значение модели ('controller.object.value'
в отладчике), а затем на последующих итерациях директивы она корректно вычисляет логическое значение, Я попытался удалить фигурные скобки из атрибута, и я просто получаю неизменную пустую строку.
Что я могу сделать, это приведет к тому, что значение модели будет правильно оцениваться в первый раз?
Примечание. Я сделал аналогичную версию этого ранее с числовым значением без проблем. Главное отличие заключается в том, что рабочая версия находится на входном элементе и имеет атрибуты ngModel и ngValue.
Как оказалось, свойства контроллера и controllerAs влияют на это. Я удалил его, но потом решил, что я предпочел бы иметь контроллер, вместо этого я использовал изоляцию для оценки объекта вместо того, чтобы читать его из свойства attr.
Рассмотрите возможность использования
attrs.$observe('customAttr', function() {
scope.customAttr= scope.$eval(attrs.customAttr);
});
для правильного двойного связывания.attrs (и, вероятно, решения вашей проблемы) с вашей директивой.
Больше информации в этом ответе и в документах.