Angularjs 自定义指令参数声明差异

Angularjs 自定义指令参数声明差异,angularjs,angularjs-directive,angularjs-scope,Angularjs,Angularjs Directive,Angularjs Scope,我想知道以以下三种方式声明自定义指令参数之间的区别: js: app.directive('customDirective', function() { return { restrict: 'E', scope : { x : '=', y : '=y', z : '=?' } , } }); 我正在监视这三个人的行为。 有人能帮忙吗

我想知道以以下三种方式声明自定义指令参数之间的区别:

js:

app.directive('customDirective', function() {
    return {
        restrict: 'E',
        scope : {
            x  :  '=',
            y  :  '=y',
            z  :  '=?'
        } , 
    }     
});
我正在监视这三个人的行为。

有人能帮忙吗?

第一个是通常的双向数据绑定,这意味着如果你说
x:'='
元素上的属性也必须是
x

第二个是第一个的替代方案,不同之处在于可以将范围变量映射到不同的属性。例如,您可以说
y:'=foo'
。这将属性
foo
映射到
y

对于最后一个属性,您可以指定可选属性,因此不必传递它们(不是必需的)

有关更多信息,请查看
$compile
上的AngularJS文档

TL;博士

=或=attr-在本地范围属性和通过值定义的名称的父范围属性之间设置双向绑定 属性的属性。如果未指定属性名,则属性 假定名称与本地名称相同。给定和定义范围:{ localModel:'=myAttr'},则小部件作用域属性localModel将 在父范围上反映parentModel的值。有什么变化吗 parentModel将反映在localModel和中的任何更改中 localModel将反映在parentModel中。如果父作用域属性 不存在,它将抛出一个不可分配的模型表达式 例外。您可以使用=?或=?属性,以便 将属性标记为可选。如果你想看的话 您可以使用=*或 =attr(=?或=*?attr,如果属性是可选的)

编辑:我认为文档已经过时,因为异常似乎只在
$compile
源代码的较旧版本中抛出。在AngularJS的较新版本中,不存在的所需范围属性将
未定义


编辑2:正如我之前提到的,Angular的较新版本将不再抛出
不可分配的\u MODEL\u表达式
异常。每当您尝试将值分配给未在元素上定义的可选属性时,仍然会出现错误。

第一个是通常的双向数据绑定,这意味着如果你说
x:'='
元素上的属性也必须是
x

第二个是第一个的替代方案,不同之处在于可以将范围变量映射到不同的属性。例如,您可以说
y:'=foo'
。这将属性
foo
映射到
y

对于最后一个属性,您可以指定可选属性,因此不必传递它们(不是必需的)

有关更多信息,请查看
$compile
上的AngularJS文档

TL;博士

=或=attr-在本地范围属性和通过值定义的名称的父范围属性之间设置双向绑定 属性的属性。如果未指定属性名,则属性 假定名称与本地名称相同。给定和定义范围:{ localModel:'=myAttr'},则小部件作用域属性localModel将 在父范围上反映parentModel的值。有什么变化吗 parentModel将反映在localModel和中的任何更改中 localModel将反映在parentModel中。如果父作用域属性 不存在,它将抛出一个不可分配的模型表达式 例外。您可以使用=?或=?属性,以便 将属性标记为可选。如果你想看的话 您可以使用=*或 =attr(=?或=*?attr,如果属性是可选的)

编辑:我认为文档已经过时,因为异常似乎只在
$compile
源代码的较旧版本中抛出。在AngularJS的较新版本中,不存在的所需范围属性将
未定义


编辑2:正如我之前提到的,Angular的较新版本不再抛出
不可分配的\u MODEL\u表达式
异常。每当您尝试将值分配给未在元素上定义的可选属性时,仍然会出现错误。

=
=y
是相同的。 您可以定义不同的作用域和html属性名称,如

scope:{
  a: '=b'
}
这样,您就可以将html属性
b
绑定到范围值
a


=?
是可选绑定。因此属性不是必需的

=
=y
是相同的。 您可以定义不同的作用域和html属性名称,如

scope:{
  a: '=b'
}
这样,您就可以将html属性
b
绑定到范围值
a


=?
是可选绑定。因此属性不是必需的

我只知道文档中说,如果您输入“=”将使用var的名称。所以y:'='和y:'=y'是sames@Okazari是的,但我认为它不仅仅包括别名,比如初始加载,还有=?我读到它是可选参数。。。但行为是一样的!那么如果它是必需的,如果它是可选的呢。。希望能在这方面得到一些帮助,谢谢。我只知道文档中说,如果您输入“=”将使用var的名称。所以y:'='和y:'=y'是sames@Okazari是的,但我认为它不仅仅包括别名,比如初始加载,还有=?我读到它是可选参数。。。但行为是一样的!那么如果它是必需的,如果它是可选的呢。。hope将在thank youthanks@LordTribul上获得一些帮助,那么这是否意味着如果我没有通过所需的参数,该指令将不起作用?我想知道他们之间的不同行为