2013-05-12 58 views
2

在我的指令中,我創建了一個隔離範圍並將其分配給代碼中的ngModel。這裏是我的分離範圍:AngularJS:雖然屬性未在元素上設置,但分配給範圍值

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

裏面的link功能我分配到scope.ngModel。如果在元素上設置ng-model屬性,那麼工作正常,但如果不是,則會引發錯誤。

Error: Non-assignable model expression: undefined 

什麼是檢查屬性是否存在的首選方法?我是否必須明確地使用element.hasAttribute這樣做,還是我完全錯了?

+0

您不能有可選的雙向綁定('=')。然而,你可以選擇['?^ require'](http://docs.angularjs.org/guide/directive)模型,並將它作爲第四個參數注入鏈接函數。 – Yoshi 2013-05-12 14:23:39

回答

1

如果ngModel屬性在您的指令中是可選的,那麼您必須在將任何值賦給作用域變量之前檢查它是否存在,否則Angular會引發錯誤。我會用if(attrs.ngModel){...}element.attrs('ngModel')來檢查它是否存在。

使用ngModel您還可以在指令鏈接功能中使用ngModelController。您可以通過require:'^ngModel'^,如果它是可選的)執行此操作,並且ngModelController將作爲鏈接控制器(link:function(scope,element,attrs,ngModelController){ ... })中的第四個參數。

相關問題