29

在这段代码中:

app.directive( 'myCustomDirective', function() {
  return {
    restrict: 'EA',
    scope: { value: '=myCustomDirective', clickable: '&', editing: '=' },
    template: '<span ng-click="handleClick()" ng-bind="value"></span>',
    ...

表示什么clickable: '&'

当我找到 Angular 文档时,我无法理解。它似乎是用 catch-22 代码编写的,只有已经理解所解释内容的人才能理解。

例如,我找到了这个视频,它显然解释了 & 的事情,但他可能一直在说普通话。

4

3 回答 3

13

更新:新的指令 API 在这里

了解范围文档有更多解释,它们提供了这个有用的链接

当我想了解这些东西时,我做了一个Fiddle

angular.module('scopePropertiesModule', [])
  .directive('scopeProps', function(){
    return {
      restrict: 'C',
      scope: {parameterTitle:'@', 
              bidirecTitle:'=',
              delegateDisplay:'&'},
      template: '<div>' +
                  'Parameter title :<br>' + 
                  '<input ng-model="parameterTitle"> => {{parameterTitle}}<br>'+
                  '<br>' +
                  'Biderectional title :<br>' +
                  '<input ng-model="bidirecTitle"> => {{bidirecTitle}}<br>' + 
                  '<br>' +
                  'Delegate display :<br>' +
                  '{{delegateDisplay()}}<br>' + 
                  '</div>'  
    }
});

和标记:

<div class="scopeProps"
     parameter-title="{{title}}" 
     bidirec-title="title"
     delegate-display="displayTitle()"></div>

随意玩它。

于 2013-06-23T09:04:51.337 回答
10

http://docs.angularjs.org/guide/directive(快速搜索“范围”)

从文档:

& 或 &attr - 提供一种在父作用域的上下文中执行表达式的方法。如果未指定 attr 名称,则假定属性名称与本地名称相同。给定范围的小部件定义:{ localFn:'&myAttr' },然后隔离范围属性 localFn 将指向 count = count + value 表达式的函数包装器。通常希望通过表达式将数据从隔离范围传递到父范围,这可以通过将局部变量名称和值的映射传递到表达式包装器 fn 来完成。例如,如果表达式是 increment(amount),那么我们可以通过将 localFn 调用为 localFn({amount: 22}) 来指定数量值。

于 2013-06-23T06:54:31.423 回答
7

这意味着当在指令范围内引用可点击变量时,Angular 会评估父范围内的关联表达式并将结果分配给变量。例如,如果您以这种方式在 HTML 代码中包含指令:

<my-custom-directive ... clickable='initialized && i > 0' ...>

Angular 将initialized && i > 0在页面控制器范围的上下文中计算表达式,并将结果分配给指令范围内的可点击变量。这将动态完成,每次表达式值更改时都会更新指令变量。

于 2013-06-23T08:44:49.693 回答