Javascript AngularJS监视输入有效性指令

Javascript AngularJS监视输入有效性指令,javascript,angularjs,Javascript,Angularjs,我喜欢观察指令中输入元素的有效性。我的控制器总是未定义。如何查看输入元素上的属性,如$valid,$invalid app.directive("myElement", function() { return { restrict: "A", templateUrl: "./Templates/tooltip.html", scope: { }, compile: function (element, att

我喜欢观察指令中输入元素的有效性。我的控制器总是
未定义
。如何查看输入元素上的属性,如
$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){
                   });
                }
             }
         }
}

要使(pre-、post-、-)链接函数的
controller
参数正常工作,您必须需要一个或多个控制器:

return {
    require: "ngModel",
    ...
};
或更多:

return {
    require: ["ngModel", "foo", "bar"],
    ...
};
但这并不能解决你的问题;您需要在指令中定义控制器,并确保模板的根元素是命名表单。因此,您可以:

模板:

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

我喜欢避免使用表格。需要一个没有它的解决方案。请尝试将答案的
{require:“ngModel”}
部分添加到代码中,但请确保模板是
,否则它无法工作。在链接函数中保留相同的代码。如何确保模板是。。。只需离开templateUrl?如果没有
模板
/
templateUrl
,请确保您将仅在具有
ng型号
的元素上使用指令。如果不是,Angular将抛出错误(未找到必需的控制器),因此它是安全的。
controller。$invalid仅在控制器为FormController时有效
return {
    controller: function($scope) {
        $scope.watch("theForm.myInput.$valid", function(isValid) {
            ...
        });
    },
    ...
};