7

Angular 1.X 中的指令默认设置为具有两种方式绑定。默认情况下,组件具有隔离范围。我有一个看起来像这样的视图:

<div class="my-view">
    {{controllerVariable}}
</div>

如果我将上述设置为指令,则controllerVariable在以下情况下正确加载:

<div ng-controller="myController">
    <my-view></my-view>
</div>

但是,如果我使用以下内容将其设置为组件:

myApp.component('myView', {
    templateUrl: '/path/to/view',
    bindings: '='
});

然后不显示变量值。我尝试添加$ctrl到变量:

<div class="my-view">
    {{$ctrl.controllerVariable}}
</div>

但这也不显示值。

我在这里想念什么?

4

2 回答 2

10

您需要将指令中的值传递给组件:

<my-view passed-var='ctrl.passedVar'></my-view>

在组件中:

myApp.component('myView', {
    templateUrl: '/path/to/view',
    bindings: {
        passedVar: '='
    },
    controller: function () {
      var vm = this;
      console.log(vm.passedVar);
    }
});

然后您将能够像示例中一样访问组件

还有其他一些方法可以做到这一点,例如使用服务来处理信息或使用 require 可以让您的组件访问指令的控制器。您可以在此处找到上述方法和其他方法:https ://docs.angularjs.org/guide/component 。

于 2016-11-11T21:25:17.380 回答
4

我必须明确声明我想绑定的变量:

myApp.component('myView', {
    templateUrl: '/path/to/view',
    bindings: {
        controllerVariable: '@'
    }
});

另外,由于controllerVariable是字符串,我不得不使用@符号绑定。

于 2016-11-15T17:04:50.807 回答