angularjs와 함께 이상한 상황이 발생합니다. 필자는 지시어에 대한 가치를 지니고 있으며 컨트롤러와 지시문에서이 값을 확인하고 조작 할 수 있어야합니다. 또한 컨트롤러에서 호출해야하는 지시문에 바인딩 된 객체의 속성으로 메소드가 있습니다. 이 메서드는 바인딩 된 값에 따라 반응해야합니다.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는"undefined로 설정하는 것이 기대
및 메서드 "someObject.myMethod"가 컨트롤러에서 호출되면 지시문의 "myValue"는 정의되지 않지만 그렇게하지는 않습니다. 난 그냥 1 밀리 초를 기다립니다 달러 (A $) 제한 시간에 메소드 호출을 래핑 경우, 내가 예상되는 동작을 얻을 :
.controller('ctrl', function($timeout){
$scope.someAction = function(){
$scope.myValue = undefined;
$timeout(function() {
$scope.someObject.myMethod();
}, 1);
};
});
이 해킹이 내 문제를 해결했다,하지만 난 무슨 일이 일어나고 있는지 이해하는 것을 선호하고 아마도 그것을 (또는 그것을 피하는) 더 우아하게 해결할 것입니다 ...