使用 Angular2 的 Nativescript 是否需要特殊的 *ngFor?
Does Nativescript using Angular2 need special a *ngFor?
我正在创建这个移动应用程序,我必须在其中列出一些标签。
代码如下所示:
@Component({
selector: 'code-m',
template: `
<StackLayout dock="top" orientation="vertical" style="height:90%;" backgroundColor="lightgray">
<label text="Code Methods" style="background-color:red;"></label>
<Label *ngFor="let item of items" [text]="item"></Label>
<label text="test" style="background-color:blue;"></label>
</StackLayout>
`
})
export class CodeMethodsComponent{
public items:Array<string> = [];
constructor(){
this.items.push("Default");
this.items.push("Validation");
this.items.push("Filter");
this.items.push("Business");
this.items.push("Provisional");
console.log(this.items);
console.log("test")
}
}
带有 *ngFor 的标签根本没有出现。感觉循环根本不起作用。我检查了 Nativescript 网站上的文档,它似乎有和旧的弃用版本(使用 # 而不是 let)也不起作用。如果您能指导我解决我的错误,并建议我在一个地方(除了 Nativescript 的网站)获得帮助,我将不胜感激。
公平地说,第一个和最后一个标签显示正确。
[编辑]
似乎在 *ngFor="let item of items
它无法识别 items 数组。尝试使用 {{}} 进行外推,但出现错误。
我不确定您的数据在列表中的样子,但请尝试使用重复标签:
<Label *ngFor="#item of items" [text]="#item"></Label>
或
<Label *ngFor="#item of items" [text]="#item.someproperty"></Label>
更新:官方文档中显示的相同示例
https://docs.nativescript.org/angular/ui/list-view.html#using-an-item-template
我查看了给定的示例,发现您应该使用 ChangeDetectionStrategy.OnPush
,它允许 view
在数组中推送新值时触发所有更改。您还可以查看下面的示例。
app.component.html
<StackLayout dock="top" orientation="vertical" style="height:90%;" backgroundColor="lightgray">
<label text="Code Methods" style="background-color:red;"></label>
<Label *ngFor="let item of items" [text]="item"></Label>
<label text="test" style="background-color:blue;"></label>
</StackLayout>
app.component.ts
import {Component, ChangeDetectionStrategy} from "@angular/core";
@Component({
selector: "my-app",
templateUrl: "app.component.html",
changeDetection: ChangeDetectionStrategy.OnPush
})
export class AppComponent {
public items:Array<string> = [];
constructor(){
this.items.push("Default");
this.items.push("Validation");
this.items.push("Filter");
this.items.push("Business");
this.items.push("Provisional");
console.log(this.items);
console.log("test")
}
}
此问题的解决方案是路由器的错误实施。
我使用 onClick router.navigate() 从我的主要组件路由到该组件。这样路由,不知道为什么,似乎路由正确到目的地,它会创建任何静态labels/buttons/etc。但不依赖于 *ngFor(即使 *ngIf 也不起作用)。
总而言之,使用 [nsRouterLink] 代替 router.navigate() 进行导航修复了我的代码。
我正在创建这个移动应用程序,我必须在其中列出一些标签。 代码如下所示:
@Component({
selector: 'code-m',
template: `
<StackLayout dock="top" orientation="vertical" style="height:90%;" backgroundColor="lightgray">
<label text="Code Methods" style="background-color:red;"></label>
<Label *ngFor="let item of items" [text]="item"></Label>
<label text="test" style="background-color:blue;"></label>
</StackLayout>
`
})
export class CodeMethodsComponent{
public items:Array<string> = [];
constructor(){
this.items.push("Default");
this.items.push("Validation");
this.items.push("Filter");
this.items.push("Business");
this.items.push("Provisional");
console.log(this.items);
console.log("test")
}
}
带有 *ngFor 的标签根本没有出现。感觉循环根本不起作用。我检查了 Nativescript 网站上的文档,它似乎有和旧的弃用版本(使用 # 而不是 let)也不起作用。如果您能指导我解决我的错误,并建议我在一个地方(除了 Nativescript 的网站)获得帮助,我将不胜感激。
公平地说,第一个和最后一个标签显示正确。
[编辑]
似乎在 *ngFor="let item of items
它无法识别 items 数组。尝试使用 {{}} 进行外推,但出现错误。
我不确定您的数据在列表中的样子,但请尝试使用重复标签:
<Label *ngFor="#item of items" [text]="#item"></Label>
或
<Label *ngFor="#item of items" [text]="#item.someproperty"></Label>
更新:官方文档中显示的相同示例 https://docs.nativescript.org/angular/ui/list-view.html#using-an-item-template
我查看了给定的示例,发现您应该使用 ChangeDetectionStrategy.OnPush
,它允许 view
在数组中推送新值时触发所有更改。您还可以查看下面的示例。
app.component.html
<StackLayout dock="top" orientation="vertical" style="height:90%;" backgroundColor="lightgray">
<label text="Code Methods" style="background-color:red;"></label>
<Label *ngFor="let item of items" [text]="item"></Label>
<label text="test" style="background-color:blue;"></label>
</StackLayout>
app.component.ts
import {Component, ChangeDetectionStrategy} from "@angular/core";
@Component({
selector: "my-app",
templateUrl: "app.component.html",
changeDetection: ChangeDetectionStrategy.OnPush
})
export class AppComponent {
public items:Array<string> = [];
constructor(){
this.items.push("Default");
this.items.push("Validation");
this.items.push("Filter");
this.items.push("Business");
this.items.push("Provisional");
console.log(this.items);
console.log("test")
}
}
此问题的解决方案是路由器的错误实施。
我使用 onClick router.navigate() 从我的主要组件路由到该组件。这样路由,不知道为什么,似乎路由正确到目的地,它会创建任何静态labels/buttons/etc。但不依赖于 *ngFor(即使 *ngIf 也不起作用)。
总而言之,使用 [nsRouterLink] 代替 router.navigate() 进行导航修复了我的代码。