隔离限制为属性的指令的范围

时间:2015-12-18 19:19:59

标签: javascript angularjs angularjs-directive angularjs-scope

在指令文档中,您可以使用以下内容隔离范围:

.directive('myDialog', function() {
  return {
    restrict: 'E',
    transclude: true,
    scope: {
      'close': '&onClose'
    },
    templateUrl: 'my-dialog-close.html'
  };
});

我正在尝试编写一个仅限于属性的指令。在使用“A”进行限制时,如何获得相同的隔离功能?

.directive('doSomething', function() {
  return {
    restrict: 'A',
    scope: {
      'close': '&???'
    },
    link: function(scope, element, attrs) {
        element.on('click', function() {
            scope.close();
        });
    }
  };
});

我会像这样使用指令:

<button do-something="doSomething()" type="button">Do Something</button>

1 个答案:

答案 0 :(得分:1)

隔离范围不取决于restrict属性。您需要在隔离范围中提及那些您将从父范围传递的变量/方法。

如下面的隔离范围声明,您已使用close作为隔离范围变量,它将接受方法,这意味着您应该在close属性中传递该方法实例。

scope: {
  close: '&' //it shouldn't be with quotes 
},

<强>标记

<button do-something close="doSomething()" type="button">Do Something</button>

修改

如果你想要为你的属性名称设置别名,那么别名将在& close: '&myAlias'之后存在,通过使用别名你可以避免执行其他指令(理想情况下你的指令不应该'有这样的名字)

scope: {
  close: '&myAlias' //it shouldn't be with quotes 
},

<强>标记

<button do-something my-alias="doSomething()" type="button">Do Something</button>