2016-05-15 48 views
2

我试图创建角2的应用程序,并在我的应用程序有一个身份验证服务,我的HTML模板是财产以后这样的:为什么* ng在角2中总是在使用函数时执行?

<header> 
    <div *ngIf="isLogin()"><a href="">profile</a></div> 
    <div *ngIf="!isLogin()"><a href="">register</a></div> 
    <div *ngIf="!isLogin()"><a href="">signin</a></div> 
    </header> 

**and this is my class :** 

@Component({ 
    selector: 'main-menu', 
    templateUrl: '/client/tmpl/menu.html', 
    directives: [ROUTER_DIRECTIVES] 
}) 
export class Menu extends Ext { 

    public items: any; 

    constructor(private _util: UtilService, private _user: UserService) { 
     super(); 


    } 

    public isLogin() { 

     console.log("test"); <==== my problem is here 
     return this._user.authorized(); 

    } 


} 

一直是我的职能在执行时(在我的身份验证服务,我有另一个功能,他们也runing)!这是使用里面的函数* ngif ?? !!! 我担心我的资源,我想知道它的问题与否?

+1

你想要做什么?显然你的函数必须每次调用,因为它在视图上绑定了绑定,所以每次角度检查isLogin中的任何变化。 –

+0

这就像setinterval或无限循环! –

+0

请你能改写你的文章,这是不可理解的。 – Romain

回答

9

每次运行Angulars变更检测时,它都会评估所有绑定,因此会调用您的函数来检查视图是否需要更新。

不鼓励在绑定中使用函数。将值分配给组件类的属性,并将其绑定到此属性,或者使用observables和| async管道向Angular通知有关已更改的值。

另一种选择是使用ChangeDetectionStrategy.OnPush,其中角度更改检测仅在输入值更改时运行。

+1

@AlirezaValizade,请参阅Günter关于此问题的其他答案:http://stackoverflow.com/questions/37024918/angular2- changedetection-or-observable/37025051#37025051 –

+0

我在我的项目中的很多地方都使用过ngIf函数。是否有任何页面崩溃的风险,由于他们?我应该改变它们还是很好? – sunnyiitkgp

+0

如果他们没有做任何实际的工作,只是返回一个简单的值,他们并不太坏。使用裸露字段更改检测效率仍然更高。如果您使用'OnPush',则更不会出现问题,因为更改检测不会经常运行。如果函数的计算量适中,则必须将其更改为属性绑定。 –

相关问题