为什么* ngIf in angular 2总是在使用功能时执行?

时间:2016-05-15 12:29:18

标签: javascript typescript angular

我正在尝试使用angular 2创建一个应用程序,并且在我的应用程序中有一个auth服务,我的html模板是这样的:

 <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();

    }


}

总是我的功能正在执行!(在我的auth服务中,我有另外一个功能,他们也在运行)!这是用于* ngif内部的功能?? !!! 我担心我的资源,我想知道它的问题与否?

1 个答案:

答案 0 :(得分:16)

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

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

另一种选择是使用ChangeDetectionStrategy.OnPush,只有在输入值发生变化时才会运行角度变化检测。