从属性指令中查看元素的ngModel

时间:2014-06-20 12:15:34

标签: javascript angularjs angularjs-directive angularjs-scope

我想从我在input元素中作为属性放置的指令中查看模型:

<input id="mymodel_headline" name="mymodel[headline]" 
      ng-model="mymodel.headline" sps-watch="true" type="text">

如果我正在阅读文档,我应该能够通过链接函数的attrs参数或需要ngModel来获取值。但是,这些方法都不起作用:

app.directive('spsWatch', function() {
  return {
    require: "ngModel",
    link: function(scope, element, attrs, ngModel) {
      console.log("directive called");
      console.log(attrs.ngModel);

      scope.$watch(scope[attrs.ngModel], function(result) {
        console.log("watching via attribute");
        console.log(result);
      });

      scope.$watch(ngModel, function(result) {
        console.log("watching via ngModel");
        console.log(result)
      });          
    }
  };      
});

当首次创建指令时,它们似乎只运行一次。

Plunkr here

1 个答案:

答案 0 :(得分:1)

您可以通过ngModel.$viewValue检索模型的值。从$watch表达式中的匿名函数返回该函数,模型中的更改将触发您的$watch函数:

  scope.$watch(function () {
    return ngModel.$viewValue;
  }, function(result) {
    console.log("watching via ngModel");
    console.log(result)
  });