지시문의 scope.$watch가 AJAX 요청 후에 호출되지 않았습니다.
다음과 같은 지시가 있습니다.
MyApp.directive('myFilter', ['$filter','$rootScope',
function($filter, $rootScope)
{
var dir = {};
dir.restrict = 'E';
dir.templateUrl = 'views/myFilter.html';
dir.replace = true;
dir.scope =
{
name: '@',
model: '=',
};
dir.link = function(scope,el,attrs)
{
//stuff here
}
return dir;
}]);
호출 방법은 다음과 같습니다.
<my-filter model="someField" name="abcd" />
디렉티브가 처음 초기화되면someField
비어 있습니다.나중에 Ajax를 통해 검색되고 값이 입력됩니다.
문제는, 어떻게 하면 IT부문의 가치를 지켜볼 수 있는가 하는 것입니다.someField
갱신할 것인가?링크 방식에서 이 작업을 수행할 경우:
scope.$watch(scope.model, function()
{
console.log( "changed, new val: ", scope.model );
}
이것은 디렉티브를 초기화할 때 한 번만 호출되며 값은 비어 있습니다.값이 ajax를 통해 검색되는 경우(from)$http.get
이 워치 기능은 다시 호출되지 않습니다.다만, 이 페이지의 다른 부분에서는,{{someField}}
, 이 값은 Ajax 요구가 Import 되었을 때 갱신됩니다.그래서 저는 이 문제가 이 일과 관련이 없는 것 같아요.$scope.apply()
Ajax 요청 후.
편집: someField
는 컨트롤러에 할당되어 있습니다.코드는 다음과 같습니다.
MyApp.controller('myCtrl',
['$scope', '$rootScope', '$routeParams',
'ajax', '$filter',
function($scope, $rootScope, $routeParams, ajax, $filter)
{
var userId = parseInt( $routeParams.userId );
$scope.loaded = false;
$scope.someField = ""; //initalize with empty value
var load = function(data)
{
$scope.loaded = true;
$scope.someField = data.someField;
};
ajax.getUser(userId).success(load);
}
]);
방법ajax.getUser()
을 하다$http.get()
반환한다.promise
위의 코드에서는load
method가 호출되어 값이 설정됩니다.someField
.
$watch
는 함수 또는 문자열 중 하나를 사용할 수 있는 식을 요구합니다.그래서 이렇게 바꾸면 될 것 같아요.
scope.$watch('model', function() { ... });
또는
scope.$watch(function() { return scope.model; }, function() { ... });
언급URL : https://stackoverflow.com/questions/18139375/scope-watch-in-a-directive-isnt-being-called-after-ajax-request
'programing' 카테고리의 다른 글
2시간 이상 경과한 Firebase 데이터 삭제 (0) | 2023.03.08 |
---|---|
스프링: 경로에 대한 /**와 /*의 차이 (0) | 2023.02.26 |
href가 Angularjs 및 Twitter Bootstrap을 사용하여 의도하지 않은 페이지 새로고침을 일으킨다. (0) | 2023.02.26 |
PHP에서 오브젝트 내의 ":private" 배열에 액세스하려면 어떻게 해야 합니까? (0) | 2023.02.26 |
Wordpress 사용자 목록에서 특정 관리자 계정 숨기기 (0) | 2023.02.26 |