将数据传递到 Angular1 应用程序中降级的 Angular2 组件
Passing data into a downgraded Angular2 component within an Angular1 Application
我是 Angular 的新手,所以如果这是一个明显的问题,请原谅我。
经过大量试验和错误,我设法正确降级了我的新 Angular2 组件,以便它可以在我的 Angular1.4 应用程序中运行。该组件大部分都有效。唯一的问题 - 这是一个大问题 - 是组件忽略了我在模板级别提供的所有输入。
我认为问题在于我传递它们的方式。我想我可能不小心使用了 Angular2 传递它们的方式而不是 Angular1,但我'我无法验证这一点。我所知道的是,当我从 ngOnInit() 中检查我的 @input() 变量的值时,它们显示为未定义,即使我正在通过模板传递硬值。
(抱歉这里的格式,否则代码似乎不会呈现为文本)
Breadcrumb.html(在 Angular1 个申请中):
> <breadcrumb <!-- These two inputs are coming in as 'undefined'??-->
> [options]="[
> {name: 'Option 1', disabled: false},
> {name: 'Option 2', disabled: false},
> {name: 'Option 3', disabled: true}
> ]"
> [selectedIndex]="0"
> (selectionMade)="logOutput($event)"
> </breadcrumb>
Breadcrumb.component.ts(在 Angular2 个组件 "breadcrumb" 内):
import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';
@Component({
selector: 'app-breadcrumb',
template: require('./breadcrumb.component.html')
})
export class BreadcrumbComponent implements OnInit {
@Input() options : Array<any>;
@Input() selectedIndex : number;
@Output() selectionMade : any = new EventEmitter();
private selected : any;
selectOption(option: any, broadcastSelection: boolean = true) {
if(this.selected === option || option.disabled) {
return;
}
this.selected = option;
if(broadcastSelection) {
this.selectionMade.emit(this.selected);
}
}
ngOnInit() {
console.log('Inside breadcrumb ngOnInit!');
console.log(options); //<---- Showing up as undefined!
console.log(selectedIndex); //<---- Showing up as undefined!
if(this.selectedIndex !== undefined) {
this.selectOption(this.options[this.selectedIndex], false);
}
}
}
breadcrumb.component.html:
(INSIDE BREADCRUMB DIRECTIVE) <!-- This is showing up and nothing else, because none of my @input values are coming through -->
<span class="breadcrumb" *ngFor='let option of options;let last = last'>
<span
(click)="selectOption(option)"
[ngClass] = "{
'selected' : selected,
'disabled' : option.disabled
}"
>
{{option.name}}
</span>
<span *ngIf="!last">
>
</span>
</span>
如果有人对我如何让我的 Angular2 组件看到我发送到其中的数据有任何建议,我将非常感激!谢谢!
我找到问题所在了。我忘了将输入和输出作为属性包含在 downgradeComponent 函数参数对象中,如下所示:
index.ts 的 ng2Components 文件夹
angular
.module('example', [])
.directive(
'breadcrumb',
downgradeComponent({
component: BreadcrumbComponent,
inputs: ['options', 'selectedIndex'], //required!
outputs: ['selectionMade']
}));
希望其他人觉得这有用。
我是 Angular 的新手,所以如果这是一个明显的问题,请原谅我。
经过大量试验和错误,我设法正确降级了我的新 Angular2 组件,以便它可以在我的 Angular1.4 应用程序中运行。该组件大部分都有效。唯一的问题 - 这是一个大问题 - 是组件忽略了我在模板级别提供的所有输入。
我认为问题在于我传递它们的方式。我想我可能不小心使用了 Angular2 传递它们的方式而不是 Angular1,但我'我无法验证这一点。我所知道的是,当我从 ngOnInit() 中检查我的 @input() 变量的值时,它们显示为未定义,即使我正在通过模板传递硬值。
(抱歉这里的格式,否则代码似乎不会呈现为文本) Breadcrumb.html(在 Angular1 个申请中):
> <breadcrumb <!-- These two inputs are coming in as 'undefined'??-->
> [options]="[
> {name: 'Option 1', disabled: false},
> {name: 'Option 2', disabled: false},
> {name: 'Option 3', disabled: true}
> ]"
> [selectedIndex]="0"
> (selectionMade)="logOutput($event)"
> </breadcrumb>
Breadcrumb.component.ts(在 Angular2 个组件 "breadcrumb" 内):
import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';
@Component({
selector: 'app-breadcrumb',
template: require('./breadcrumb.component.html')
})
export class BreadcrumbComponent implements OnInit {
@Input() options : Array<any>;
@Input() selectedIndex : number;
@Output() selectionMade : any = new EventEmitter();
private selected : any;
selectOption(option: any, broadcastSelection: boolean = true) {
if(this.selected === option || option.disabled) {
return;
}
this.selected = option;
if(broadcastSelection) {
this.selectionMade.emit(this.selected);
}
}
ngOnInit() {
console.log('Inside breadcrumb ngOnInit!');
console.log(options); //<---- Showing up as undefined!
console.log(selectedIndex); //<---- Showing up as undefined!
if(this.selectedIndex !== undefined) {
this.selectOption(this.options[this.selectedIndex], false);
}
}
}
breadcrumb.component.html:
(INSIDE BREADCRUMB DIRECTIVE) <!-- This is showing up and nothing else, because none of my @input values are coming through -->
<span class="breadcrumb" *ngFor='let option of options;let last = last'>
<span
(click)="selectOption(option)"
[ngClass] = "{
'selected' : selected,
'disabled' : option.disabled
}"
>
{{option.name}}
</span>
<span *ngIf="!last">
>
</span>
</span>
如果有人对我如何让我的 Angular2 组件看到我发送到其中的数据有任何建议,我将非常感激!谢谢!
我找到问题所在了。我忘了将输入和输出作为属性包含在 downgradeComponent 函数参数对象中,如下所示:
index.ts 的 ng2Components 文件夹
angular
.module('example', [])
.directive(
'breadcrumb',
downgradeComponent({
component: BreadcrumbComponent,
inputs: ['options', 'selectedIndex'], //required!
outputs: ['selectionMade']
}));
希望其他人觉得这有用。