【问题标题】:Data interpolation binding behavior with "this" keyword and without "this" keyword in angular?角度中带有“this”关键字和没有“this”关键字的数据插值绑定行为?
【发布时间】:2017-06-21 05:06:31
【问题描述】:

下面的代码是我的组件

@Component({
    selector: 'my-app',
    template: '<div>{{name}}</div>'
})

export class MyApp {
    name: String = '';
    constructor(){
        this.name = 'Mr_Perfect';
    }

}

在模板中我知道当我提到{{name}}时数据会绑定。但如果我将其更改为{{this.name}},它也可以工作。

有什么不同吗?哪个更好用?

【问题讨论】:

  • 你可以使用this,但你不应该。
  • 请解释清楚。为什么我应该?为什么我不应该?
  • 因为没有文档记录,因此得不到可靠的支持,并且可能会在未来的版本中中断,与 AoT 或 Angular Universal 等不兼容。
  • @NightCabbage 在这里我们得到了正确的参考 :) plnkr.co/edit/2itCNGaaX9xu36hFsVXM?p=preview 但我认为使用其他名称会更好

标签: angular


【解决方案1】:

自 Angular 2 RC5 起,他们似乎在模板中启用了this。我用Angular 2 BetaAngular 2 FinalAngular 4 尝试了这个,它适用于后两者。

这里有一些活生生的例子(this默认没有添加,在模板中添加)

Plunker Example using Angular 2 Beta Plunker Example using Angular 2 Final Plunker Example using Angular 4

角度模板可以访问Component Class 的所有本地变量。这意味着与在函数中必须输入 this 才能访问类中的变量不同,您不需要在模板中这样做,但在 2.x 和 4.x 中,您可以根据需要这样做。

@Component({
    selector: 'my-app',
    template: `<div>{{name}}</div>       <!-- Angular 2 & Angular 4 -->
               <div>{{this.name}}</div>  <!-- Angular 4 Only -->`
})

export class MyApp {
    name: string = '';
    constructor(){
        this.name = 'Mr_Perfect';
      // ^ required
    }

    get(name: string)
    {
        return this.name;
             // ^ required
    }

}

【讨论】:

【解决方案2】:

您无法访问模板中的任何全局等内容。仅包含当前内容中的内容 (`this)。

所以,我想说,即使另一个答案说 Angular 4 会让你这样做(请注意,他们没有对此发出任何声音),但最好不要包含 @987654321 @。

原因是很明显this 是您不会跳过的隐式提供的上下文。写 this. 可能会暗示新开发人员您可以调用其他东西,这是不正确的。

【讨论】:

  • 无论您是否正在编写,您都在隐式使用this。你不能调用全局范围内的任何东西,甚至不能调用相同的 .ts 文件,甚至是静态的东西。因此,如果您开始在模板中编写多余的this.,下一个查看代码的开发人员可能会认为他们可以在模板中使用其他内容,因此可能会导致混乱。
猜你喜欢
  • 2019-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-25
  • 2014-02-19
  • 1970-01-01
相关资源
最近更新 更多