Скажем, у меня есть директива, которая выглядит так:
<foo-bar bar-foo="booleanValue"></foo-bar>
booleanValue
здесь относится к родительской области видимости — области действия контроллера, который прикреплен к представлению, в котором находится указанный выше элемент директивы.
Теперь в моей директиве я определил директиву следующим образом:
app.directive('fooBar', function() {
return {
restrict: 'E',
scope: {
barFoo: '=barFoo'
},
link: function(scope, iElement, iAttrs) {
scope.$watch('barFoo', function() {
if(scope.barFoo !== true) return;
});
//Code to execute when barFoo is true
}
};
});
Проблема здесь в том, что значение, которое передается в barFoo
, является логическим значением, но в конечном итоге оно становится строковым значением. Таким образом, `if (scope.barFoo !== true) всегда будет успешным, и функция компоновщика никогда не будет выполнена.
Я не хочу менять код на if (scope.barFoo === "true")
.
Как передать логическое значение в область видимости?
EDIT: я хочу добавить, что booleanValue
действительно является логическим значением (обычно передается как true) родительским контроллером в директиву. Просто когда значение передается, оно преобразуется в строку, а не остается логическим.
ng-controller
из элемента, который был назначен другому контроллеру. Таким образом, всего было два контроллера — один из директивы и один из атрибутаng-controller
— удаление последнего решило проблему. Спасибо, что сообщили мне, что моя проблема действительно является ошибкой в моем приложении, а не стандартным поведением! 15.04.2013