1

如何将指令参数传递给其控制器?

我使用指令:

<directive value="ctrl.item"></directive>

.directive('directive', [ function () {
    return {
        restrict: 'AE',
        scope: {
            value: '=value'
        },
        templateUrl: 'item.html',
        controller: 'Item as item'
    };
}])

我想value在指令的控制器中阅读:

.controller('Item', [function Item () {

    console.log(this.value);
}])

可以使用this吗?

4

2 回答 2

1

bindToController 属性设置为true

.directive('directive', [ function () {
    return {
        restrict: 'AE',
        scope: {
            value: '=value'
        },
        //USE bindToController
        bindToController: true,
        templateUrl: 'item.html',
        controller: 'Item as item'
    };
}])

bindToController

此属性用于将作用域属性直接绑定到控制器。它可以是true与范围属性具有相同格式的对象散列或对象散列。

当隔离范围用于指令(见上文)时,bindToController: true将允许组件将其属性绑定到控制器,而不是范围。

实例化控制器后,隔离范围绑定的初始值将绑定到控制器属性。一旦它们被初始化,您就可以通过提供一个名为 的控制器方法来访问这些绑定$onInit,该方法在元素上的所有控制器都已构建并初始化它们的绑定之后被调用。

— AngularJS 综合指令 API 参考


使用$onInit生命周期钩子

.controller('Item', function Item () {
    this.$onInit = function() {    
        console.log(this.value);
    };
})

$compile

由于bcd0d4,默认情况下禁用控制器实例上的预分配绑定。仍然可以重新打开它,这在迁移过程中应该会有所帮助。预分配绑定已被弃用,并将在未来的版本中删除,因此我们强烈建议尽快迁移您的应用程序以不依赖它。

依赖于存在绑定的初始化逻辑应该放在控制器的$onInit()方法中,保证总是在绑定分配后调用。

— AngularJS 开发人员指南 - 从 V1.5 迁移到 V1.6

于 2017-03-18T03:10:45.997 回答
0

它应该在您的指令中scope,您可以在方法中访问它,link如下所示:

app.directive('directive', function () {
  return {
    restrict: 'AE',
    scope: {
        value: '='
    },
    templateUrl: 'item.html',
    link: function (scope, element, attrs) {
      console.log(scope.value);
    }
  };
});
于 2017-03-18T00:54:03.747 回答