AngularJS Watch输入有效性指令

时间:2013-12-13 14:35:10

标签: javascript angularjs

我喜欢在指令中观察输入元素的有效性。我的控制器总是undefined。如何在输入元素上观看$valid$invalid等属性?

app.directive("myElement", function()
{
    return {
        restrict: "A",
        templateUrl: "./Templates/tooltip.html",
        scope: {
        },
        compile: function (element, attrs) {
            return {
                pre: function preLink(scope, element, attrs, controller) {
                },
                post: function postLink(scope, element, attrs, controller) {
                   scope.$watch(function(){return controller.$invalid;},function(newVal,oldVal){
                   });
                }
             }
         }
}

1 个答案:

答案 0 :(得分:1)

要使(前,后, - )链接函数的controller参数起作用,您必须要求一个或多个控制器:

return {
    require: "ngModel",
    ...
};

或更多:

return {
    require: ["ngModel", "foo", "bar"],
    ...
};

这不会解决你的问题;您需要在指令中定义控制器,并确保模板的根元素是命名表单。所以你可以这样做:

模板:

<form name="theForm">
    <input name="myInput" ng-model="foo.name" />
</form>

指令:

return {
    controller: function($scope) {
        $scope.watch("theForm.myInput.$valid", function(isValid) {
            ...
        });
    },
    ...
};