AngularJS - 嵌套组件回调没有使其通过组件工厂

Posted

技术标签:

【中文标题】AngularJS - 嵌套组件回调没有使其通过组件工厂【英文标题】:AngularJS - nested component callback not making it past a component factory 【发布时间】:2018-09-27 07:16:29 【问题描述】:

我正在使用 Ionic 1.3.5 和 AngularJS 1.5.3 编写应用程序。

我有嵌套组件和一个组件工厂,它决定渲染哪个子组件。

一个子类型有一个 onClick 回调,我试图将其传播给父级。我不断收到此错误:Cannot use 'in' operator to search '$ctrl' in Today

这是我的工厂:

<clickable-list
    ng-if="$ctrl.type === 'clickableList'"
    on-click="$ctrl.onClick(value)"
    answer="$ctrl.answer">
</clickable-list>

<plain-text-answer
    ng-if="$ctrl.type === 'plainText'"
    answer="$ctrl.answer">
</plain-text-answer>

我能够修复我的 Plunker,使其运行并重现错误:http://plnkr.co/edit/ESTMPRRpdRuks6AJdRxv

【问题讨论】:

【参考方案1】:

首先,您的 plunker 不起作用,因为您必须有空格:

template: ['<component', 'value="1">', '</component>'] 

结果为 html &lt;componentvalue="1"&gt;&lt;/component&gt;

其次,你的问题是你如何链调用传递value。要使其在没有其他方法的情况下工作,您需要:

一个组件

<c1 ng-click="$ctrl.onClick(value: value)">

两个组件

<c1 on-click="$ctrl.onClick(value: value)">
<c2 ng-click="$ctrl.onClick(value: value: value)">

...

由于这有点迟钝,最好创建中间方法:

c1: (onClick: '&')
vm.doClick = (value) => 
  vm.onClick(value: value);

那么你就有了 c1 的精美 html:&lt;c2 ng-click="$ctrl.doClick(value: value)"&gt;

http://plnkr.co/edit/27cCqsnACtdIz00PfI3E?p=preview 正确插入

【讨论】:

这行得通,但在我的真实代码库中,我需要再上几级......我不明白为什么需要多次包装它或使用中间方法。

以上是关于AngularJS - 嵌套组件回调没有使其通过组件工厂的主要内容,如果未能解决你的问题,请参考以下文章

深入了解AngularJs-Ui-router

在反应中测试嵌套组件回调

如何将回调从父组件传递到嵌套路由组件?

vue多层嵌套组件传值

在 AngularJS 中设置 JSONP 回调函数

AngularJs组件(Component)