AngularJS 嵌套组件双向绑定 - 不起作用

AngularJS nested components two way binding - doesn't work

我是 AngularJS 的新手,我遇到了使用 AngularJS 组件进行双向绑定的问题。 我有嵌套的组件,我正在尝试绑定某些东西并在较低级别(子组件)更改它。

  1. 只能从父级别更改。
  2. $onChanges 似乎不起作用,我不明白为什么。

var myApp = angular.module('myApp', []);
myApp.controller('cc', function($scope) {
  $scope.text = 'Initial';
  $scope.data = {
    text: 'Initial'
  };
  $scope.change = function() {
    $scope.data.text = 'Root changed';
    $scope.text = 'Root changed';
  };
});

myApp.component('parent', {
  transclude: true,
  bindings: {
    data: "<",
    text: "="
  },
  template: '<div><button ng-click="parentController.click()">Parent change</button><div ng-transclude></div></div>',
  controller: function($scope) {
    var self = this;
    this.click = function() {
      self.data.text = 'Parent changed';
      self.text = 'Parent changed';
    };
    this.$onChanges = function() {
     console.log('$onChanges');
    }
  },
  controllerAs: 'parentController'
});

myApp.component('child', {
  bindings: {
    data: "<",
    text: "="
  },
  template: '<button ng-click="childController.click()">Child Change</button>',
  controller: function() {
    var self = this;
    this.click = function() {
      self.data.text = 'Child changed';
      self.text = 'Child changed';
    };
  }, 
  controllerAs: 'childController'
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script>
<div ng-app="myApp" ng-controller="cc">
  <div>
    {{data.text}} text
  </div>
  <div>
    {{text}} text
  </div>
  <button ng-click='change()'>
    Root Change
  </button>
  <parent data="data" text="text">
    <child data="data" text="text"></child>
  </parent>
</div>

谢谢!

JSFiddle demo

实际上 self.text 你只是在更新自己的控制器值而不是父范围

日期中的值正在更新,因为对象是通过引用传递的,无论你在哪里更改它的值,它都会反映到父级,但文本值不会像这样更新

您需要指定现在将哪个文本 属性 传递给子控制器,因为父控制器也有一个文本 属性,所以如果您想传递 parents.parents 文本 属性在你身上这样做<child>

<child data="data" text="$parent.$parent.text"></child>

我希望这能解决问题