나는 지시문을 만드는 데 손을 뻗고 있습니다. 일이 단순히 작동하지 않았기 때문에이 기본적인 경쟁 조건 문제가 문제를 일으키는 것을 발견 할 때까지 단순화했습니다. 내 지시문의 컨트롤러에서 다음과 같은 몇 가지 검사를 수행해야합니다.
if ($scope.test.someValue === true) { $scope.test.anotherValue += 1; }
다음은이 문제가 어떻게 나타나는지 설명하는 몇 가지 로그가있는 기본 지침입니다.
app.directive('myDirective', function () {
return {
restrict: 'E',
replace: true,
scope: {
test: '='
},
template: '<div><pre>{{ test | json }}</pre></div>',
controller: function ($scope, $timeout) {
// this logs undefined
console.log($scope.test);
// this logs the scope bound 'test' object
$timeout(function() {
console.log($scope.test);
}, 300);
}
};
});
이 경합 상태로 작업하는 올바른 방법은 무엇입니까? 현실 세계에서이 시간 제한 기능이 API 호출에 걸리는 시간에 따라 작동하거나 실패 할까 걱정됩니다.
"연결"단계 (컨트롤러를 할당 할 때)에서 $scope.test
변수가 아직 할당되지 않았으므로undefined
는 $timeout(fn, timeout)
은 $ 범위에 뭔가 영향을 미칠 것입니다 무언가를 실행하는 방법입니다. $ timeout () 값을 0으로 설정해도 여전히 작동합니다. 그 이유는 $ timeout (...) 함수가 현재 $digest()
주기가 끝날 때까지 연기되기 때문 입니다.
참조 : $ timeout () $ digest ()
또한 특정 값의 변경 사항을 확인하려면 다음을 수행 할 수 있습니다.
$scope.$watch("test.somevalue", function(new_val, old_val) {
console.log("somevalue changed!! - increment othervalue");
$scope.othervalue += 1;
});
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다