2016-06-10 84 views
1

我只是拿起selectize例如Angular:'='和'=?'有什么区别而在指令定义范围

angular.module('selectize', []).value('selectizeConfig', {}).directive("selectize", ['selectizeConfig', function(selectizeConfig) { 
     return { 
     restrict: 'EA', 
     require: '^ngModel', 
     scope: { 
      ngModel: '=', 
      config: '=?', 
      options: '=?', 
      ngDisabled: '=', 
      ngRequired: '&' 
     }, 
link: function(scope, element, attrs, modelCtrl) {...} 

我知道“=”将映射现有的控制器范围的财产双向但什么“=?” ?

+5

'=?'是可选的 – Satpal

回答

2
scope: {foo: '=?'} 

表示“不产生错误,如果‘富’不能得到解决。

“隔离”范围采用对象哈希,该对象哈希定义了从父范围派生的一组本地 范围属性。这些本地属性 对模板的别名值很有用。当地人定义是本地范围属性其源的 散列:

=或= ATTR - 建立本地范围属性,并经由ATTR属性的值 定义名称的父范围属性之间的双向结合。如果未指定attr名称,则假定属性 名称与本地名称相同。鉴于与

scope: { 
localModel:'=myAttr' }, 

部件定义窗口小部件,然后scope属性localModel将 反映parentModel的父范围值。 parentModel的任何更改将反映在localModel中,localModel中的任何更改都会反映在parentModel中。如果父范围属性 不存在,则会抛出NON_ASSIGNABLE_MODEL_EXPRESSION 异常。您可以使用

=? or =?attr 

以标志属性为可选避免这种行为。

2

==attr集的了双向局部范围的属性和父作用域属性之间的绑定,如果父scope属性不存在,它会抛出一个异常NON_ASSIGNABLE_MODEL_EXPRESSION

这可避免为了使用=?=?attr检举财产这种行为,因为可选