Angular:' ='之间的区别是什么?和' =?'同时在指令中定义范围

时间:2016-06-10 11:42:38

标签: javascript angularjs angularjs-directive

我只是拿起选择性的例子

    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) {...}

我知道' ='将以两种方式映射现有控制器范围的属性,但是' =?' ?

2 个答案:

答案 0 :(得分:2)

==attr设置本地范围属性和父范围属性之间的双向绑定,如果父scope属性不存在,则会抛出{{ 1}}例外。

这样可以使用NON_ASSIGNABLE_MODEL_EXPRESSION=?来避免此行为,以便将该属性标记为可选

答案 1 :(得分:2)

.txt

表示'如果'foo'无法解决,请不要引发错误。

  

'isolate'范围采用对象哈希定义一组局部   从父作用域派生的作用域属性。这些当地的财产   对模板的别名值很有用。当地人的定义是   本地范围属性的哈希值来源:

     

=或= attr - 在本地范围属性和通过值定义的名称的父范围属性之间设置双向绑定   oftr属性。如果未指定attr名称,则为该属性   假定name与本地名称相同。

的给定和小部件定义
scope: {foo: '=?'}
  

然后是widget范围属性localModel   反映父范围内parentModel的值。任何改变   parentModel将反映在localModel和任何更改中   localModel将反映在parentModel中。如果是父范围属性   如果不存在,它将抛出NON_ASSIGNABLE_MODEL_EXPRESSION   例外。您可以使用

来避免此行为
scope: {  
localModel:'=myAttr' }, 
  

以便将属性标记为可选。