具有输出参数的 Angular 2 降级组件到 Angular 1

Posted

技术标签:

【中文标题】具有输出参数的 Angular 2 降级组件到 Angular 1【英文标题】:Angular 2 Downgrade Component with Output Parameter to Angular 1 【发布时间】:2019-07-29 05:54:29 【问题描述】:

我成功地将 Angular 7 组件降级到 Angular 1,但我遇到了一个小问题,我尝试了很多方法来解决。

我的降级组件输出参数如下:

@Output()isValid = new EventEmitter<boolean>();

触发如下:

this.isValid.emit(false);

在我的 Angular 1 组件中,我在降级后使用它,如下所示:

在模板中:
<downgrade-employee-selector (is-valid)="vm.validateEmployeeSelector($event)"> </downgrade-employee-selector>
在 ts 中:
self.validateEmployeeSelector = ($event) => console.log($event);

它工作正常,但在 Angular 1 函数中 $event 值始终未定义,我无法理解它是如何工作的。

【问题讨论】:

【参考方案1】:

我找到了解决我的问题的方法如下:

定义我的组件输入和输出:
directive('downgradeEmployeeSelector', downgradeComponent(
        component: EmployeeSelectorComponent,    
        inputs: ['selectedEmployeesIds', 'multiSelect', 'required'],
        outputs: ['isValid', 'selectedEmployeesIdsChange']
      )
在 Angular 1 html 页面中调用输出和输入:
<downgrade-employee-selector name="empSelector" [selected-employees-ids]="vm.selectedEmployeeIds" [required]="true" (is-valid)="vm.validateEmployeeSelector($event)"></downgrade-employee-selector>

【讨论】:

【参考方案2】:

实际上,原始实现的问题在于 AngularJS html 的语法。 我相信在 downgradeComponent 方法中添加输入和输出的规范(根据您自己的解决方案)不会改变事情。 但是,如果您在 AngularJS 标准中正确指定输出的名称(连字符而不是驼峰大小写),并且您绑定控制器的方法而不进行插值,它就像一个魅力。

解决方案:

在 Angular 组件中: @Output() isValid = new EventEmitter&lt;boolean&gt;(); 在 AngularJS 模板中: &lt;downgrade-employee-selector ... (is-valid)="vm.validateEmployeeSelector($event)"&gt;&lt;/downgrade-employee-selector&gt; 降级时: directive('downgradeEmployeeSelector', downgradeComponent( component: EmployeeSelectorComponent )

【讨论】:

以上是关于具有输出参数的 Angular 2 降级组件到 Angular 1的主要内容,如果未能解决你的问题,请参考以下文章

将数据传递到 Angular1 应用程序中的降级 Angular2 组件

将 Angular 组件降级为 AngularJS

Angular 2路由到同一组件

将 AngularJS 数组传递给降级的 Angular 7 组件

降级使用 Typescript 编写的 angular2 组件。如何将其导入用 es5 编写的 angular 1 项目?

将 Angular 组件从许多输入/输出重构为单个配置对象