2

在我的指令中,我创建了一个隔离范围并分配给ngModelin 代码。这是我的隔离范围:

scope: {
  ngModel: '=',
  value: "=",
  placeholder: "@"
}

link我分配给scope.ngModel. 如果在元素上设置了属性,那效果很好ng-model,但如果不是,则会引发错误。

Error: Non-assignable model expression: undefined

检查属性是否存在的首选方法是什么?我必须明确地element.hasAttribute这样做还是我做错了?

4

1 回答 1

1

如果 ngModel-attribute 在你的指令中是可选的,你必须在你为范围变量赋值之前检查它是否存在,否则 Angular 会引发错误。我会使用if( attrs.ngModel ){...}orelement.attrs('ngModel')来检查它是否存在。

ngModel您还可以选择在指令链接函数中使用ngModelController。您可以通过require:'^ngModel'^如果它是可选的)来执行此操作,并且 ngModelController 将作为链接控制器 ( link:function(scope,element,attrs,ngModelController){ ... }) 中的第四个参数提供。

于 2013-05-12T14:31:59.113 回答