NgZone/Angular2/Ionic2 TypeError:无法读取未定义的属性“运行”

Posted

技术标签:

【中文标题】NgZone/Angular2/Ionic2 TypeError:无法读取未定义的属性“运行”【英文标题】:NgZone/Angular2/Ionic2 TypeError: Cannot read property 'run' of undefined 【发布时间】:2016-12-20 15:02:27 【问题描述】:

我收到此错误 TypeError: Cannot read property 'run' of undefined in Subscriber.js:229 并且不知道为什么 - 在 ionic beta 10 中,此代码运行良好...在 11 没有。

import Component, NgZone from '@angular/core';
import NavController from 'ionic-angular';

declare var io;

@Component(
  templateUrl: 'build/pages/home/home.html'
)    
export class HomePage 
    static get parameters() 
        return [NgZone];
    

    zone: any;
    chats: any;
    chatinp: any;
    socket: any;

constructor(public navCtrl: NavController, ngzone) 
    this.zone = ngzone;
    this.chats = [];
    this.chatinp ='';
    this.socket = io('http://localhost:3000');
    this.socket.on('message', (msg) => 
        this.zone.run(() => 
            this.chats.push(msg);
        );
    );


send(msg) 
    if(msg != '')
        this.socket.emit('message', msg);
    
    this.chatinp = '';
   

【问题讨论】:

【参考方案1】:

而不是像这样注入它:

static get parameters() 
  return [NgZone];

你为什么不这样做:

import  Component, NgZone  from "@angular/core";

@Component(
  templateUrl:"home.html"
)
export class HomePage 

  public chats: any;

  constructor(private zone: NgZone) 

    this.chats = [];
    let index: number = 1;

    // Even though this would work without using Zones, the idea is to simulate
    // a message from a socket.
    setInterval(() =>  this.addNewChat('Message ' + index++); , 1000);
  

  private addNewChat(message) 
    this.zone.run(() => 
        this.chats.push(message);
    );
  

我将private zone: NgZone 添加为constructor 中的参数,然后我可以通过使用zone 变量来使用run() 方法,如下所示:

this.zone.run(() => 
  // ... your code
);

【讨论】:

以上是关于NgZone/Angular2/Ionic2 TypeError:无法读取未定义的属性“运行”的主要内容,如果未能解决你的问题,请参考以下文章

如何在 11ty 中显示精选帖子

如何获取菜单的当前链接(11ty / ejs)?

分页不适用于 11ty(十一)中的可扩展布局

如何打印帖子 11ty 的通用大写字母?

11ty 的页眉中的页面 <style>

11ty 为每个数据文件渲染单个帖子