AngularJS:虽然未在元素上设置属性,但已分配给范围值

时间:2013-05-12 13:47:28

标签: angularjs

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

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

在我分配给link的{​​{1}}函数中。如果在元素上设置了scope.ngModel属性,那么它可以正常工作,但是当它不是时会引发错误。

ng-model

检查属性是否存在的首选方法是什么?我是否必须使用Error: Non-assignable model expression: undefined 明确地执行此操作,还是完全错误?

1 个答案:

答案 0 :(得分:1)

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

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