4

파서 및 포맷터를 처음 사용합니다. 모델의 변경에 대한 유효성 검사를 수행하는 지시문이 있습니다.이 작업을 수행하는 한 가지 방법은 $ watch이지만 모델을 업데이트 할 수 있기 때문에 좋은 방법은 아닙니다. 입력 텍스트 상자에서 파서 기능이 변경되지 않습니다.

그래서 나는 파서보고 있었고이 코드

app.directive('myDirective', function($compile) { 


return { 
    restrict: 'E', 
    require: 'ngModel', 
    scope: { 

    }, 

    link: function($scope, elem, attr, ctrl) { 
     console.debug($scope); 
     ctrl.$formatters.push(function(value) { 
     console.log("hello1"); 
     return value; 
     }); 
     ctrl.$parsers.unshift(function(value) { 

     debugger; 
     console.log("hello"); 
     return value; 
     }); 
    } 
    }; 
}); 

을 시도하지만 파서 함수가 호출되지 않습니다. 포맷터는 한 번 호출됩니다. Please see the plunkr. 누군가 내가 잘못하고있는 것을 말해 줄 수 있습니까? 텍스트 상자에 입력 할 때 파서 함수가 호출되지 않는 이유는 무엇입니까?

+1

시도해보십시오. $ parsers.push, 여전히 작동하지 않습니다. – Abhik

답변

1

이것은 늦은 답변이지만 참조 용으로 : 나는 u1 변경 사항이 발생하는 동안 $parsers을 호출하는 "풀"이 누락 된 곳이라고 생각합니다. 같은이해야 뭔가 : 전체 참고로

app.directive('myDirective', function($compile) { 

return { 
    restrict: 'E', 
    require: 'ngModel', 
    scope: { 

    }, 

    link: function($scope, elem, attr, ctrl) { 
     console.debug($scope); 
     ctrl.$formatters.push(function(value) { 
     console.log("hello1"); 
     return value; 
     }); 
     ctrl.$parsers.unshift(function(value) { 
     return value; 
     }); 
     scope.$watch('directive model here', function() { 
     ctrl.$setViewValue(<build model from view here>); 
     }); 
    } 
    }; 
}); 

this (최고) 게시물을 참조하시기 바랍니다.

0

연결된 DOM 요소가 변경되지 않았으므로 link 함수가 호출되지 않습니다. 모델 만 변경됩니다. 이 작품 :

HTML :

This scope value <input ng-model="name" my-directive> 

JS :

app.directive('myDirective', function($compile) { 
    return { 
     require: 'ngModel', 
     link: function($scope, elem, attr, ctrl) { 
      ctrl.$parsers.unshift(function(value) { 
       console.log("hello"); 
      }); 
     } 
    }; 
}); 

link 함수가 호출 될 때에 대한 자세한 내용은 here를 참조하십시오.