简体   繁体   English

角4:全局变量未定义

[英]Angular 4: global variable is undefined

I use Angular ^4.2.4 . 我使用Angular ^ 4.2.4

Need global function range for all components: 需要所有组件的全局功能范围

import { Injectable } from '@angular/core';

@Injectable()
export class Global {

  range:object = function(n:number){

    var vs = [];

    for( var i=0; i < n; i++ )
      vs.push(i);

    return vs;
  }
}

Component example of root: 根的组件示例:

import { Component } from '@angular/core';
import { Global } from "./global";

@Component({
  selector: 'app-root'
  ,templateUrl: '<ul><li *ngFor="let i of global.range(5)">{{i}}</li></ul>'
  ,providers: [ Global ]
})
export class AppComponent {
  constructor( public global: Global ){}
}

But console log is: 但是控制台日志是:

ERROR TypeError: Cannot read property 'range' of undefined
    at Object.eval [as updateDirectives] (AppHome.ngfactory.js:19)
    at Object.debugUpdateDirectives [as updateDirectives] (core.es5.js:13065)
    at checkAndUpdateView (core.es5.js:12245)
    at callViewAction (core.es5.js:12610)
    at execComponentViewsAction (core.es5.js:12542)
    at checkAndUpdateView (core.es5.js:12251)
    at callViewAction (core.es5.js:12610)
    at execEmbeddedViewsAction (core.es5.js:12568)
    at checkAndUpdateView (core.es5.js:12246)
    at callViewAction (core.es5.js:12610)

That instruction don't work for me... 那条指令对我不起作用...

1) Make your method public 1) public您的方法

@Injectable()
export class Global {

   public range(n:number): number[] {
     const vs: number[] = [];

     for( let i = 0; i < n; i++ ) {
        vs.push(i);
     }

     return vs;
   }

}

2) Change templateUrl to template 2)更改templateUrltemplate

@Component({
   selector: 'app-root',
   template: '<ul><li *ngFor="let i of global.range(5)">{{ i }}</li></ul>',
   providers: [Global]
})
export class AppComponent {
   constructor( public global: Global ) { }
}

You should use modifiers like: 您应该使用如下修饰符:

public;
private;
protected;

when You declaring variables like: public range ; 当您声明以下变量时: public range ;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM