【问题标题】:Multi-Level Component Callbacks in Angular 1.5Angular 1.5 中的多级组件回调
【发布时间】:2016-09-04 11:04:37
【问题描述】:

我来自 React / Redux 思维模式,其中数据操作功能以及数据从父级传递到子级到孙子级等。组件本身不会修改数据,而是将它们的意图传递回组件树。

我正在尝试使用 Angular 1.5 中的组件来复制它。考虑以下几点:

app.js:

const appController = ($scope, data) => {
  $scope.doSomething = () => console.log('Foooooo!');
};

app.html:

<div>
  <node
    do-something="doSomething()"
  ></node>
</div>

node.js:

app.component('node', {
  // ...
  bindings: {
    doSomething: '&',
  },
});

node.html:

<div>
  <leaf
    do-something="$ctrl.doSomething()"
  ></leaf>
</div>

leaf.js:

app.component('leaf', {
  // ...
  bindings: {
    doSomething: '&',
  },
});

leaf.html:

<div ng-click="$ctrl.doSomething()"></div>

这行得通。当单击leaf 中的div 时,'Foooooo!' 会记录到控制台。但是,如果我将ngClick 回调更改为传递leaf 范围内的某些内容(或者甚至只是诸如'foo' 之类的文字)并更改app.js 中的doSomething 以获取参数为@987654343 @。我的猜测是我必须以某种方式在node 中传递数据,但我不知道如何。有没有办法通过中间组件传递参数而不必在范围内编写包装函数?我试过使用 arguments 但这不起作用 - 有没有一些 Angular 方法来完成我想要的?

编辑:

Plunkr:https://plnkr.co/edit/7L4Kd3rhJXoGlrHzecHf?p=preview

【问题讨论】:

  • 大声笑,node.js。这可能会让人感到困惑。另外,plunkr 会很好。
  • 试着让你的绑定成为一个引用而不是一个表达式,而不是doSomething: '&amp;' doSomething: '=' 并删除节点和叶标记的括号。
  • 您可以添加您尝试过但不起作用的代码
  • codepen 在这里非常有用。你所描述的一切都应该有效。

标签: angularjs angularjs-directive angularjs-components


【解决方案1】:

编辑:这可能真的有效,也可能无效...

当您调用一个由&amp; 运算符提供的函数时,您似乎不是直接调用该函数,而是调用一个使用其参数作为表达式上下文的函数。以下作品:

app.js:

const appController = ($scope, data) => {
  $scope.doSomething = value => console.log(value);
};

app.html:

<div>
  <node
    do-something="doSomething(value)"
  ></node>
</div>

node.js:

app.component('node', {
  // ...
  bindings: {
    doSomething: '&',
  },
});

node.html:

<div>
  <leaf
    do-something="$ctrl.doSomething({ value: value })"
  ></leaf>
</div>

leaf.js:

app.component('leaf', {
  // ...
  bindings: {
    doSomething: '&',
  },
});

leaf.html:

<div ng-click="$ctrl.doSomething({ value: someVar })"></div>

【讨论】:

  • KPthunder,想要添加一个正常工作的 Plunkr 并为其他人接受这个答案吗?
  • 事实证明它实际上并没有像我想象的那样工作。我来自 React 背景,我试图在一个 Angular 项目中硬塞一个通量架构,但我最终做了一些不同的事情。
猜你喜欢
  • 1970-01-01
  • 2016-05-21
  • 2016-12-15
  • 2016-06-04
  • 1970-01-01
  • 2017-03-21
  • 2016-12-18
  • 2017-07-27
  • 2017-12-18
相关资源
最近更新 更多