2015-06-21 107 views
0

我在AngularJS中使用了一个指令,我试图检查我的字段是否是$ dirty,如果这是真的我想记录一条消息,当它发生变化时我想显示另一条消息(这句话稍后将被替换为更复杂的东西)。Angular指令不看

我想在所有的输入中重用我的指令,但我不能。提前致谢。

<input ng-edited ng-model="stakeholder.nombre" name="nombre" type="text"> 

我的指示是:

MetronicApp.directive('ngEdited', function() { 
    return { 
     restrict: 'A', 
     require: ['^form', 'ngModel'], 
     link: function (scope, elem, attrs, req) { 
      scope.elemDirty = req[1].$dirty; 
      scope.elemName = req[1].$name; 
      var doFunction = function() { 
       if (scope.elemDirty) { 
        console.log("true"); 
       } else { 
        console.log("false"); 
       } 
      }; 
      scope.$watch(scope.elemName, doFunction, true); 
     } 
    }; 
}); 
+0

我不确定在这个例子中'req [1]'是什么。通常一个控制器作为第四个参数传递给链接函数。 – Claies

+0

@Claies我正在发送第4个arg中的两个项目:form和ngmodel,你可以在require中看到它 –

回答

1

基于this answer,为什么不尝试

link: function (scope, elem, attrs, ngModel) { 
    var doFunction = function (isDirty) { 
     if (isDirty) { 
      console.log("true"); 
     } else { 
      console.log("false"); 
     } 
    }; 
    scope.$watch(function(){return ngModel[1].$dirty;},doFunction); 
} 

See plunker

编辑

我注意到在你的问题中,你正试图观察元素名称的变化。我不知道你将如何改变这种属性,但如果你是,使用attrs.$observe

attrs.$observe('name', doFunction); 
+0

nope,它不工作:-(,仍然没有看到变化 –

+0

@JeanCedron笨拙的作品,请你说明一下不适合你? – Yaelet

1

如果你使用一个参数(而不是字符串),你需要从一个函数返回它:

scope.$watch(function() { 
    return scope.elemName; 
}, doFunction, true); 
+0

我也试过这个,但它不工作,它没有看任何改变 –

+0

@JeanCedron你能提供一个小提琴吗? –