Я испытываю странную ситуацию с угловыми. У меня есть значение, связанное с директивой, и мне нужно иметь возможность проверять и управлять этим значением как с контроллера, так и с директивы. У меня также есть метод как свойство объекта, связанного с директивой, которую мне нужно вызвать из контроллера. Ожидается, что этот метод будет реагировать соответственно на связанное значение.angularjs - ожидая значения, которое должно быть связано с директивой
Вот некоторые псевдо-код для иллюстрации:
.controller('ctrl', function(){
$scope.someAction = function(){
$scope.myValue = undefined;
$scope.someObject.myMethod();
};
});
.directive('myDirective', ...){
return {
...
scope: { myValue: '=', someObject: '=' },
link: function (scope) {
scope.someObject = {
myMethod: function(){
if (angular.isDefined(scope.myValue)){
// do something
}
else {
// do something else
}
}
};
}
}
}
и в шаблоне контроллера:
<my-directive my-value="myValue" some-object="someObject"></my-directive>
Я бы ожидать, что, когда «SomeAction» срабатывает «MyValue» установлено значение не определено и метод «someObject.myMethod» вызывается из контроллера, «myValue» в директиве не определен, но это не так. Однако, если я обернуть вызов метода в $ тайм-аут, который ждет только 1 миллисекунду, я получаю ожидаемое поведение:
.controller('ctrl', function($timeout){
$scope.someAction = function(){
$scope.myValue = undefined;
$timeout(function() {
$scope.someObject.myMethod();
}, 1);
};
});
Этот хак решил мою проблему, но я бы предпочел, чтобы понять, что происходит и возможно, решить его (или избежать) более элегантно ...