ng 모델 변경 시 각도 - ng 모델 변경 시 불이 붙지 않음
입력 내용은 다음과 같습니다.
<input type="text" ng-model="repair.test" ng-change="action()" />
그action()
입력을 수동으로 입력하고 변경하면 실행됩니다.하지만 만약 내가 수리를 바꾼다면.프로그래밍 방식으로 다른 함수에 의한 test value, ng-change의 동작을 수행하지 않습니다.각진 튜토리얼을 읽어봤는데 예상했던 행동일 거예요.
https://docs.angularjs.org/api/ng/directive/ngChange
"모델에서 값이 바뀌면 식이 평가되지 않습니다." <- 저도 이것이 필요합니다.모델이 변경될 경우 컨트롤러에서 액션을 수행하려면 어떻게 해야 합니까?(입력 또는 기타 기능에 의한 typing)
도와 주셔서 감사해요.
편집:
모델 값은 실제로form.$valid
, 그 주변에 자체 Form controller가 있어서(생각합니다) 그래서 action function을 사용해서 그 값을 부모컨트롤러에 전달하려고 한거죠.$scope.$watch
초기화된 경우에만 작동하지 않습니다.
ngChange는 단지 입력을 위한 것입니다. 만약 모델이 이렇게 하는 것을 듣고 싶다면 이렇게 하십시오.
$scope.$watch('repair.test', function(newvalue,oldvalue) {
});
ngChange 식은 입력 값의 변경으로 인해 새 값이 모형에 커밋되는 경우에만 평가됩니다.
평가되지 않습니다.
- 만약 그 값이 그로부터 반환된다면.
$parsers
변환 파이프라인이 변경되지 않았습니다. - 모델이 null로 유지되므로 입력이 계속 유효하지 않은 경우
- 입력 값의 변경이 아닌 프로그래밍 방식으로 모델을 변경하는 경우
$scope을 사용하여 감시자를 만들어 봅니다.$시계 -$watch(watchExpression, listener, [objectEquality]);
예
$scope.$watch('repair.test', function(newValue, oldValue) {
// ...
});
컨트롤러에서 감시 기능을 사용할 수 있습니다.
$scope.$watch('repair.test', function() {
$scope.action();
});
또 다른 해결책은 모델의 변경 사항을 감시하는 지시를 사용하는 것이 아니라ng-change
.
app.directive('onModelChange', function($parse){
return {
restrict: "A",
require: "?ngModel",
link: function(scope, elem, attrs, ctrl) {
scope.$watch(attrs['ngModel'], function (newValue, oldValue) {
if (typeof(newValue) === "undefined" || newValue == oldValue) {
return;
}
var changeExpr = $parse(attrs['onModelChange']);
if (changeExpr) {
changeExpr(scope);
}
});
}
};
});
그러면 이렇게 사용하게 됩니다.
<input class="value" type="text" ng-model="myVar" on-model-change="doSomething(myVar)"/>
언급URL : https://stackoverflow.com/questions/24802627/angular-ng-change-not-firing-when-ng-model-is-changed
'source' 카테고리의 다른 글
지시문의 요소에 html을 추가하고 상호 작용할 로컬 함수를 만듭니다. (0) | 2023.10.24 |
---|---|
Apache 웹 서버와 symphony 애플리케이션 (0) | 2023.10.24 |
자바스크립트 객체를 sessionStorage에 저장합니다. (0) | 2023.10.24 |
CentOS에서 Python.h 파일을 찾을 수 없습니다. (0) | 2023.10.24 |
단일 항목이 있는 배열로 변환 (0) | 2023.10.24 |