【问题标题】:ngSwitch in Ionic2 not workingIonic2中的ngSwitch不起作用
【发布时间】:2016-12-25 14:58:28
【问题描述】:

我正在尝试在我的应用连接状态的不同状态之间切换标头。但是在第一次更改绑定变量“serverConnectionStatus”(在下面的代码中)后,我得到一个空标题而不是不同的标题。

我尝试将 ngSwitch 放在 ion-header 本身和 ion-navbar 中。

但到目前为止没有成功....

我正在使用 angular 2 + ionic 2 的夜间构建。

任何线索做错了什么?

<div [ngSwitch]="serverConnectionStatus">
    <ion-header *ngSwitchCase="'connecting'">
        <ion-navbar>
            <ion-title>
                <span style="color: #00b900 !important;">Connecting Server...</span>
            </ion-title>
        </ion-navbar>
    </ion-header>
    <ion-header *ngSwitchCase="'error'">
        <ion-navbar>
            <ion-title>
                <span style="color: #ff1608 !important;">No Posts: {{serverConnectionError}}</span>
            </ion-title>
        </ion-navbar>
    </ion-header>
    <ion-header *ngSwitchCase="'connecting'">
        <ion-navbar>
            <ion-title>
                <span style="color: #00b900 !important;">Connecting Server...</span>
            </ion-title>
        </ion-navbar>
    </ion-header>
</div>

在下面添加我的完整组件源代码:

Home.ts

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { Config } from '../../providers/config/config';
import { PostService } from '../../providers/http/post-service'
import { ToastController } from 'ionic-angular';
import { NgSwitch, NgSwitchCase, NgSwitchDefault } from '@angular/common';

@Component( {
    templateUrl: 'build/pages/home/home.html',
    directives: [NgSwitch, NgSwitchCase, NgSwitchDefault]
    } )

export class HomePage
{
    private posts: any;
    public serverConnectionStatus: string = "connecting";
    public serverConnectionError: string = "";

    constructor( private navCtrl: NavController, private toastController : ToastController, private config: Config, private PostService: PostService )
    {
        this.getLocalPosts();
    }

    private addRandomPosts()
    {

    }

    private getLocalPosts()
    {
        this.PostService.getPosts()
            .subscribe(
                postsJson =>
                {
                    this.posts = postsJson;
                    this.serverConnectionStatus="connected";
                },
                error =>
                {
                    console.error( error );
                    //this.serverConnectionError="1234"; // error.statusText;
                    //this.serverConnectionStatus="error";
                } );
    }
}

Home.html

<div [ngSwitch]="serverConnectionStatus">
    <ion-header *ngSwitchCase="'connecting'">
        <ion-navbar>
            <ion-title>
                <span style="color: #00b900 !important;">Connecting Server...</span>
            </ion-title>
        </ion-navbar>
    </ion-header>
    <ion-header *ngSwitchCase="'error'">
        <ion-navbar>
            <ion-title>
                <span style="color: #ff1608 !important;">No Posts: {{serverConnectionError}}</span>
            </ion-title>
        </ion-navbar>
    </ion-header>
    <ion-header *ngSwitchCase="'connected'">
        <ion-navbar>
            <ion-title>
                <span style="color: #00b900 !important;">Connected</span>
            </ion-title>
        </ion-navbar>
    </ion-header>
</div>

<ion-content class="home">
  <ion-list>
    <ion-item *ngFor="let post of posts">
      <ion-avatar item-left>
        <img src="{{post.picture.thumbnail}}">
      </ion-avatar>
      <h2>{{post.name.first}} {{post.name.last}}</h2>
      <p>{{post.email}}</p>
    </ion-item>
  </ion-list>
</ion-content>

【问题讨论】:

  • 不。删除引号只会导致标题根本不显示...
  • 尝试使用这个&lt;template [ngSwitchCase]="'Eenie'"&gt;&lt;span&gt;Eenie&lt;/span&gt;&lt;/template&gt;。我的意思是用template 标签包装ion-header 标签
  • 我不认为 template.html 文件中允许使用
  • serverConnectionStatus 是字符串吗?
  • 为什么不能在模板文件中使用? angular.io/docs/ts/latest/api/common/index/… &lt;template&gt; 标签是替代语法。但我想是的,它不会有帮助。 Mybe,你应该把 switch 放到&lt;ion-title&gt;?

标签: angularjs angular ionic-framework ionic2


【解决方案1】:

请查看this plunker。与其定义三个不同的ion-header,不如只使用一个(推荐like)并像这样绑定打字稿代码中可能发生变化的东西:

    <ion-header>
        <ion-navbar>
            <ion-title>
                <span [style.color]="color">{{ title}}</span>
            </ion-title>
        </ion-navbar>
    </ion-header>

然后

    private getLocalPosts()
    {
        this.PostService.getPosts()
            .subscribe(
                postsJson =>
                {
                    this.posts = postsJson;
                    this.serverConnectionStatus="connected";

                    // Added code
                    this.color = ...;
                    this.title = ...;
                },
                error =>
                {
                    console.error( error );
                    //this.serverConnectionError="1234"; // error.statusText;
                    //this.serverConnectionStatus="error";

                    // Added code
                    this.color = ...;
                    this.title = ...;
                } );
    }

【讨论】:

  • 有充分的理由:我想改变标题的颜色。事实上,我需要的最重要的功能是在连接应用程序时完全隐藏标题。现在(beta11)不工作的警报窗口的替代品......
  • 嗯,我明白了...我不知道这是否会派上用场,但我正在做一个项目,我们使用ion-toolbar 来显示与状态相关的通知网络连接。我已经更新了the plunker,所以你可以看看。希望这会有所帮助:)
  • @rubmz 你所说的“替代现在(beta11)不工作的警报窗口”是什么意思?
  • 任何使用 present() 函数的组件现在都已失效。这是在 beta11 中添加的 Angular 中的一个新错误。尝试更新并亲自查看;)希望他们能快速修复它......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-29
  • 1970-01-01
  • 2017-03-03
  • 1970-01-01
  • 2018-01-19
相关资源
最近更新 更多