사용자 지정 지시문을 사용하고 $ scope.model을 캡처하려고 시도하고 있으며 초기 값이있는 경우 해당 데이터 등을 처리하고 싶습니다.
내 초기 코드는 다음과 같습니다.
if ($scope.model && $scope.model.length > 0) {
var id = angular.isArray($scope.model) ? $scope.model.join(',')
: $scope.model;
if (id)
initialJobs.push(
$http.get(config.root.api + 'sectors?id=' + id)
);
}
$ scope.model이 null이기 때문에 if 문이 처리되지 않습니다. (console.log를 넣고 $ scope.model이 null임을 확인했습니다).
제한 시간이 1000ms이면 $ scope.model의 실제 데이터를 캡처합니다.
추신 : $ scope.model 데이터는 컨트롤러의 HTTP 요청을 통해 수집되며 양방향 바인딩으로 인해 먼저 null로 보도록 전송되고 데이터가 형성되면 모델 값이 변경됩니다.
읽어 주셔서 감사합니다 :)
추신 :이 문제를 해결하는 한 가지 해결책은 라우터 계층에서 비동기 요청을 해결하고 양방향 바인딩에서 지연이없는 컨트롤러로 전달하는 것입니다. 하지만 저는이 문제에 대해 나쁜 습관이라고 생각합니다.
해당 값에 감시자를 추가 할 수 있습니다.
$scope.$watch('model', function(model, oldModelValue) {
var id = angular.isArray(model) ? model.join(',') : model;
if (id)
initialJobs.push($http.get(config.root.api + 'sectors?id=' + id));
});
주의해야합니다. watcher $scope.model
는 null이거나 다른 예상치 못한 값이더라도 변경 될 때마다 콜백을 호출 합니다.
또 다른 더 나은 솔루션은 $ scope.model을 say $scope.modelPromise
와 같은 값으로 설정하고 약속을 할 수있는 $ http 호출의 반환 값 (약속)을 설정할 수 있습니다 then
.
$scope.modelPromise = $http.get('some-url').then(function(response) {
$scope.model = response.data;
});
// somewhere else
$scope.modelPromise.then(function(response) {
// do stuff here
});
과잉이 아니라면 $ resource 서비스를 사용하는 것이 좋습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다