무한 다이제스트 루프의 기본 개념과 그 일이 어떻게 발생하는지,하지만 문제가 있습니다.
jsfiddle 콘솔에서 당신이 무한 소화 루프를 볼 수 있습니다 : 여기 내 코드와 문제를 보여주는 바이올린입니다.
기본적으로 아직로드하지 않은 데이터에 대한 결정을 내려야하므로 then()을 사용하여 해결할 때까지 기다려야합니다. 나는 user라고하는 약속을했습니다. 코드에서 두 개의 다른 위치가 있는데, 여기서 나는()을 호출합니다.
- 그냥 정의합니다. 나는 그것을 기반으로 범위 변수를 설정해야합니다. 난 그냥 $ scope.isAdmin() 메소드에 직접 $ scope.user를 사용하지 않는 이유 번호 2에 대한 또 다른 범위의 방법에서 , $ scope.isAdmin()는
, 그것은하라는 메시지가 표시 될 수 있습니다. 문제는 $ scope.isAdmin()이 사용자가 비동기 요청을하기 전에 호출 될 수 있다는 것입니다.이 경우 $ scope.isAdmin()에서 반환하기 전에 '차단'해야합니다.
제 질문은 $ scope.isAdmin()이 '감시 된'변수가 변경되었고 다이제스트주기를 다시 실행해야한다고 생각합니까?
$ scope.isAdmin()이 실제로 아무것도 변경하지 않습니다.
HTML :
<body ng-controller='myController'>
<div ng-if='isAdmin()'>Hi! <strong>{{ user.username }}</strong> is an Admin!!!</div>
<div ng-if='!isAdmin()'>Hi! <strong>{{ user.username }}</strong> is NOT an Admin!!!</div>
</body>
그리고 JS : 그래서
angular.module('myApp', [])
.factory('myService', function($q, $timeout) {
return {
getUser: function() {
var deferred = $q.defer();
$timeout(function() {
deferred.resolve({ username: 'me', isAdmin: true });
}, 2000);
return deferred.promise;
}
};
})
.controller('myController', function($scope, $q, myService) {
var getUserDeferred = $q.defer();
var user = getUserDeferred.promise;
user.then(function(user) {
$scope.user = user;
return user;
});
$scope.getUser = function() {
return myService.getUser().then(function(user) {
getUserDeferred.resolve(user);
});
};
$scope.isAdmin = function() {
return user.then(function(user) {
return user.isAdmin;
});
};
$scope.getUser();
});
감사 :
그리고 여기 완전성에 대한
업데이트 된 jsfiddle입니다 새로운 값을 반환하는 [...] 값이었습니다 (반환 값이 변하지 않았기 때문에 적용주기가 영원히 계속되었습니다).' – keithl8041