我有一个组件,其中定义了一个imageUrl
属性,在我的模板中,我使用这个属性来设置图像的URL。
我尝试使用插值和属性绑定来实现这一点,两种方法都有效,但我找不到它们之间的区别,或者何时使用其中一种。 有人知道区别吗?
<img [src]='imageUrl' >
<img src= {{ imageUrl }} >
我有一个组件,其中定义了一个imageUrl
属性,在我的模板中,我使用这个属性来设置图像的URL。
我尝试使用插值和属性绑定来实现这一点,两种方法都有效,但我找不到它们之间的区别,或者何时使用其中一种。 有人知道区别吗?
<img [src]='imageUrl' >
<img src= {{ imageUrl }} >
插值使用{{ expression }}将绑定的值呈现到组件模板中。 插值是Angular将其转换为属性绑定的特殊语法。
属性绑定使用[]将值从组件发送到模板。 属性绑定:要将元素属性设置为非字符串数据值,必须使用属性绑定。
例如:
我们通过绑定布尔属性isDisabled来禁用按钮。
<button [disabled]='isDisabled'>Try Me</button>
使用插值代替属性绑定后,按钮将始终被禁用,而不管isDisabled类属性的值是true还是false。
<button disabled='{{isDisabled}}'>Try Me</button>
规范形式是方括号的替代语法。
<button bind-disabled='isDisabled'>Try Me</button>
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
template: `<div>
<img src="https://angular.io/assets/images/logos/angular/{{imageName}}">
</div>`
})
export class AppComponent {
imageName: string = "logo-nav2x.png";
}
字符串插值和属性绑定
字符串插值是一种特殊的语法,由Angular转换为属性绑定。它是属性绑定的便捷替代品。
当你需要连接字符串时,必须使用插值而不是属性绑定。
@Component({
selector: 'my-app',
template: `<div>
<h1>{{interposlationExample}}</h1>
</div>`
})
export class AppComponent {
interposlationExample: string = 'Interpolation for string only';
}
当您需要将元素属性设置为非字符串数据值时,使用属性绑定。
示例:
在下面的示例中,我们通过绑定布尔属性isDisabled来禁用按钮。
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
template: `<div>
<button [disabled]='isDisabled'>Disable me</button>
</div>`
})
export class AppComponent {
isDisabled: boolean = true;
}
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
template: `<div>
<button disabled='{{isDisabled}}'>Disable Me</button>
</div>`
})
export class AppComponent {
isDisabled: boolean = true/false;
}
从安全角度来看,Angular数据绑定在将恶意内容显示在浏览器上之前进行了净化。插值和属性绑定都可以保护我们免受恶意内容的侵害。
在下面的示例中,我们正在使用插值。请注意,存在对标签的恶意使用。
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
template: '<div>{{badHtml}}</div>'
})
export class AppComponent {
badHtml: string = 'Hello <script>alert("Hacked");</script> World';
}
Angular插值对恶意内容进行了清理并在浏览器中显示以下内容:
Hello alert("Hacked"); World
在下面的示例中,我们正在使用属性绑定。
'<div [innerHtml]="badHtml">'
属性绑定以稍微不同的方式净化恶意内容,我们得到以下输出,但需要牢记的重要一点是两种技术都保护我们免受恶意内容的侵害,并将内容无害地呈现。
Hello alert("Hacked"); World
参考:https://csharp-video-tutorials.blogspot.com/2017/06/property-binding-in-angular-2.html
src="http://{{url}}"
)。 - user4615488