AngularJS:将ngModel从控制器传递给指令

时间:2015-09-08 09:41:44

标签: javascript angularjs

我有一个控制器,里面有一个属性指令,该指令需要它的控制器父级的ngModel。

请参阅此Plunkr

问题

虽然表单正确加载,但指令中的日志显示为:

a.$…t.aa {$attr: Object, $$element: R[1], fieldValidator: "", boundModel: "person", ngModel: undefined}

知道为什么ngModel未定义以及为什么boundModel包含字符串' person'?我一直盯着这个......

3 个答案:

答案 0 :(得分:1)

试试这个

app.directive('fieldValidator', [function(){
  return {
    restrict: 'A',
    scope: {
      boundModel: '='
    },
    controller: function($scope){

    },
    link: function ($scope, $elem, $attrs) {
      console.log($scope.boundModel);
    }
  }
}]);

像其他人说的那样,没有使用该指令的ng-model。 boundModel: '='boundModel: '=boundModel'

的缩写

如果您想访问boundModel,那么只需使用$ scope.boundModel忽略$ attr中显示的内容,而不是您需要的内容。

答案 1 :(得分:0)

{ boundModel: '=ngModel' }表示您通过boundModel属性传递ng-model属性。但是在模板中,您不使用ng-model属性。你改为bound-model

答案 2 :(得分:0)

scope: {
   boundModel: '=ngModel'
},

您错误地使用了范围变量。当您说'= ngModel'时,您说该指令上有一个名为'ng-model'的属性,您希望在指令中使用该属性作为scope.boundModel。

您似乎想要使用ng-model控制器,为什么不在指令上使用ng-model而不是boundModel?

您可以将html中的绑定模型重命名为ng-model,并从指令中删除范围。如果你想使用ngModelController,你需要在指令链接函数中注入它,如下所示:

return {
    restrict: 'A',
    required: '^ngModel',
    scope: {},
    controller: function($scope){

    },
    link: function ($scope, $elem, $attrs, ngModel) {
      console.log($attrs);
    }
  }

使用ngModelController,您可以在html中设置绑定到ng-model的人的有效性等,如记录here