我有一个脚本在VueJS中使用bind方法。筛选器的目的是根据性别或所有人来遣返人们。
我有HTML代码:
<div id="demo">
<div class="radio">
<label>
<input type="radio" name="gender" v-model="gender" value="all"> All
</label>
</div>
<div class="radio">
<label>
<input type="radio" name="gender" v-model="gender" value="male"> Male
</label>
</div>
<div class="radio">
<label>
<input type="radio" name="gender" v-model="gender" value="female"> Female
</label>
</div>
<ul>
<!-- Don't forget about Vue's filterBy filter. This is only for ex. -->
<li v-for="person in people | gender">{{ person.name }}: {{ person.gender }}</li>
</ul>
</div>
Run Code Online (Sandbox Code Playgroud)
以下是JavaScript代码:
new Vue({
el: '#demo',
data: {
gender: 'all',
people: [
{ name: 'Jeff', gender: 'male' },
{ name: 'Jack', gender: 'male' },
{ name: 'Steven', gender: 'male' },
{ name: 'Kate', gender: 'female' },
{ name: 'Susan', gender: 'female' },
{ name: 'Claire', gender: 'female' }
]
},
filters: {
gender: function(people) {
if (this.gender == 'all') return people;
return people.filter(function(person) {
return person.gender == this.gender;
}.bind(this));
}
}
});
Run Code Online (Sandbox Code Playgroud)
我不太了解bind(this)在这种情况下的作用。谁能向我解释?谢谢,
所以这是关于的闭包和上下文this。当您将此函数绑定到函数时,它将绑定函数的上下文(或“词法范围”)this更改为绑定函数,this保留在外部闭包中,而不是在绑定的函数内部,从而使方法和属性可从该函数中获取。外部范围。
在您的示例中,您要使Vue的数据属性'gender'(等于'all')(在您引用时称为该属性)this.gender可在endering()函数的闭包中使用,否则它将是未定义的。
注意,这是ES5中非常常见的模式。但是,如果移至ES6的箭头功能,因为它很常见,因此此绑定实际上是默认设置。您的sex()函数将在ES6中这样编写。
gender (people) => {
if (this.gender == 'all') return people
return people.filter((person) => person.gender === this.gender)
}
Run Code Online (Sandbox Code Playgroud)
更加简洁,无需绑定this:)
更新:2019-我也不会使用同名的变量和函数-this.gender(变量)和this.gender()(函数)。
| 归档时间: |
|
| 查看次数: |
8845 次 |
| 最近记录: |