在我的指令中,我创建了一个隔离范围并在代码中分配给ngModel
。这是我的隔离范围:
scope: {
ngModel: '=',
value: "=",
placeholder: "@"
}
在我分配给link
的{{1}}函数中。如果在元素上设置了scope.ngModel
属性,那么它可以正常工作,但是当它不是时会引发错误。
ng-model
检查属性是否存在的首选方法是什么?我是否必须使用Error: Non-assignable model expression: undefined
明确地执行此操作,还是完全错误?
答案 0 :(得分:1)
如果ngModel-attribute在指令中是可选的,则必须在将任何值赋给scope变量之前检查它是否存在,否则Angular将引发错误。我会使用if( attrs.ngModel ){...}
或element.attrs('ngModel')
来检查它是否存在。
使用ngModel
,您还可以选择在指令链接功能中使用ngModelController。您可以通过require:'^ngModel'
(^
,如果它是可选的)执行此操作,并且ngModelController将作为链接控制器中的第四个参数(link:function(scope,element,attrs,ngModelController){ ... }
)。