javascript - 带有 require 的父指令 Controller 上的 Angular 监视

标签 javascript angularjs angularjs-directive

我有一个父指令和子指令,每个指令都有一个 Controller ,子指令中都需要这两个指令。我想在子指令的链接函数中监视父指令 Controller 上的属性的更改。但是,监视函数会在初始化时触发,但随后当通过父指令作用域中的按钮或父指令的链接函数更改属性时不会触发。

请有人解释一下这是为什么以及我应该如何解决它?

家长指令

myApp.directive('parentDirective', function ($timeout) {
    return {
        restrict: 'E',
        scope: true,
        controllerAs: 'parentCtrl',
        controller: function () {
            var vm = this;
            vm.someProperty = true;
            vm.toggle = function () {
                vm.someProperty = !vm.someProperty;
            }
        },
        link: function (scope, element, attrs, controller) {
            $timeout(function () {
                controller.toggle();
            }, 1000);
        }
    } });

子指令

myApp.directive('childDirective', function () {
    return {
        restrict: 'E',
        scope: true,
        require: ['childDirective', '^parentDirective'],
        controllerAs: 'childCtrl',
        controller: function () {
            var vm = this;
            vm.someProperty = '';
        },
        link: function (scope, element, attrs, controllers) {

            var controller = controllers[0];
            var parentController = controllers[1];

            scope.$watch('parentController.someProperty', function () {
                controller.someProperty = parentController.someProperty 
                    ? 'Hello world!' : 'Goodbye cruel world';
            });
        }
    }
});

查看

<parent-directive>
    <button ng-click="parentCtrl.toggle()">Toggle message</button>
    <child-directive>
        <p>{{childCtrl.someProperty}}</p>
    </child-directive>
</parent-directive>

Fiddle .

最佳答案

在您正在观看的范围内,父 Controller 是“parentCtrl”而不是“parentController”,因此您实际上并没有在观看您想要的属性。以下内容应该有效:

scope.$watch('parentCtrl.someProperty', function () {
  controller.someProperty = parentController.someProperty 
    ? 'Hello world!' : 'Goodbye cruel world';
});

关于javascript - 带有 require 的父指令 Controller 上的 Angular 监视,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32916598/

相关文章:

javascript - tinymce 失去插入位置

javascript - 在 V8 JavaScript (Chrome & Node.js) 中访问行号

angularjs - 具有 Angular 路由配置的 Webpack - 浏览器具有有效配置,无法解析文件

javascript - AngularJS 动态模型

javascript - 在 TypeScript Angular 指令中调用函数?

javascript - iframe 中不解析 Css 和 Javascript

javascript - Bootstrap 显示和折叠表格行

angularjs - Angular UI Grid:如何创建用于列过滤的预填充下拉菜单

javascript - Angular2 拖放

css - 如何提供 API 来更改封装的 angularJS 指令(可重复使用的小部件/组件)的 CSS/样式/白色标签