【问题标题】:Pass data from child component to parent and back down将数据从子组件传递给父组件并返回
【发布时间】:2018-11-30 10:36:33
【问题描述】:

假设我有一个如下所示的组件:

parent.component.js

...
template: `<div>
             <child-one value="value" callback="callback"></child-one>
             <child-two value="value"></child-two>
           </div>`,
controller: function() {
  this.callback = function(n) {
    this.value = n;
  }
}
...

那么子组件是这样的:

childOne.component.js

...
bindings: {
  value: '<',
  callback: '<'
},
template: `<input type="text"
                  ng-model="$ctrl.value"
                  ng-change="$ctrl.callback($ctrl.value)"
           />`
...

childTwo.component.js

...
bindings: {
  value: '<'
},
template: `<div>{{$ctrl.value}}</div>`
...

(绑定技术感谢krawaller

我希望childOne 中设置的值转到childTwo。更新childOne 中的value 确实会更新parent 中的value,但不会将其传递给childTwo

【问题讨论】:

  • 最好的方式是使用服务来共享数据。

标签: angularjs data-binding binding


【解决方案1】:

注意: 您正在 this 对象中设置值。不直接在 $scope 中。

使用 $scope,而不是 this

修改代码:

parent.component.js

...
template: `<div>
             <child-one value="value" callback="callback"></child-one>
             <child-two value="value"></child-two>
           </div>`,
controller: function($scope) {
  $scope.callback = function(n) {
    $scope.value = n;
    console.log($scope.value);
  }
}
...

如果你想用 this 关键字编写代码,请使用 controllerAs 语法。

parent.component.js

请参考以下代码
...
template: `<div>parent: {{vm.value}} <br/><div/>
         <div>
            <child-one value="vm.value" callback="vm.callback"></child-one>
            <child-two value="vm.value"></child-two>
         </div>`,
controller: function() {
  const vm = this;
  vm.callback = function(n) {
    vm.value = n;
    console.log(vm.value);

  }
},
controllerAs: "vm"
...

结果: 更新 childOne 中的值将更新 parent 以及 childTwo 中的值。

【讨论】:

  • 好的,那么你应该什么时候使用$scope 而不是this?根据我发现/了解的情况,components 使用 this,因为它会创建一个 isolated-scope,除非您想访问 $watch$digest$emit(至少每个 teamtreehouse.com/community/…
  • refer link 上使用 $scope 另外,根据我的观点,“this” [Controller Ref] 也是一个变量,将在 HTML 中分配给 $scope。您可以详细查看 $scope 参数。您将了解到“this”[controller ref] 是在该 HTML 本身的范围内分配的。因此,无论何时使用 $scope 或 this。只需遵守约定。谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-02-23
  • 1970-01-01
  • 1970-01-01
  • 2019-01-07
  • 2021-12-27
  • 2021-04-22
  • 2019-01-29
  • 2020-02-04
相关资源
最近更新 更多