金库lg电子游戏平台网址:Vue 的双向绑定原理与用法揭秘

这篇文章主要先容了Vue的双向绑定道理与用法,结合实例形式总结阐发了Vue的双向绑定基滥觞基本理、功能、用法及留意事变,必要的同伙可以参考下本文实例讲述了Vue的双向绑定道理与用法。分享给大年夜家供大年夜家参考,详细如下:Vue中必要输入什么内容的




这篇文章主要先容了Vue 的双向绑定道理与用法,结合实例形式总结阐发了Vue 的双向绑定基滥觞基本理、功能、用法及留意事变,必要的同伙可以参考下

本文实例讲述了Vue 的双向绑定道理与用法。分享给大年夜家供大年夜家参考,详细如下:

Vue 中必要输入什么内容的时刻,自然会想到应金库lg电子游戏平台网址用的要领来实现双向绑定。下面是一个最简单的示例

What's your name:

Hello {{ name }}

new Vue({

el: "#app",

data: {

name: ""

}

});

在这个示例的输入框中输入的内容,会随后出现出来。这是 Vue 原生对的优越支持,也是一个父组件和子组件之间进行双向数据通报的范例示例。不过 v-model 是 Vue 2.2.0 才加入的一个新功能,在此之前,Vue 只支持单向数据流。

Vue 的单向数据流

Vue 的单向数据流和 React 相似,父组件可以经由过程设置子组件的属性(Props)来向子组件通报数据,而父组件想得到子组件的数据,得向子组件注册事故,在子组件痛快的时刻触发这个事故把数据通报出来。一句话总结起来便是,Props 向下通报数据,事故向上通报数据。

上面那个例子,假如不应用 v-model,它应该是这样的

因为事故处置惩罚写成了内联模式,以是脚本部分不必要改动。然则多半环境下,事故一样平常都邑定义成一个措施,代码就会繁杂得多

new Vue({

// ....

methods: {

updateName(e) {

this.name = e.target.value;

}

}

})

从上面的示例来看 v-model 节约了不少代码,最紧张的是可以少定义一个事故处置惩罚函数。以是 v-model 实际干的事故包括

应用 v-bind(即 :)单向绑定一个属性(示例::value="name")

绑定 input 事故(即 @input)到一个默认实现的事故处置惩金库lg电子游戏平台网址罚函数(示例:@input=updateName

这个默认的事故处置惩罚函数会根据事故工具带入的值来改动被绑定的数据(示例:this.name = e.target.value)

自定义组件的 v-model

Vue 对原生组件进行了封装,以是在输入的时刻会触发 input 事故。然则自定义组件应该怎么呢?这里不妨借助 JsFiddle Vue 样板的 Todo List 示例。

JsFiddle 的 Vue 样板

点击 JsFilddle 的 Logo,在上面弹出面板中选择 Vu金库lg电子游戏平台网址e 样板即可

样板代码包孕 HTML 和 Vue(js) 两个部分,代码如下:

Todos:

{{ todo.text }}

{{ todo.text }}

new Vue({

el: "#app",

data: {

todos: [

{ text: "Learn JavaScript", done: false },

{ text: "Learn Vue", done: false },

{ text: "Play around 金库lg电子游戏平台网址in JSFiddle", done: true },

{ text: "Build something awesome", done: true }

]

},

methods: {

toggle: function(todo){

todo.done = !todo.done

}

}

})

定义 Todo 组件

JsFiddle 的 Vue 模板默认实现一个 Todo 列表的展示,数据是固定的,所有内容在一个模板中完成。我们首先要服务情是把单个 Todo 改成一个子组件。由于在 JsFiddle 中不能写成多文件的形式,以是组件应用 Vue.component() 在脚本中定义,主如果把

内容中的那部分拎出来:

Vue.component("todo", {

template: `

{{ text }}

{{ text }}

`,

props: ["text", "done"],

data() {

return {

isDone: this.done

};

},

methods: {

toggle() {

this.isDone = !this.isDone;

}

}

});

原本定义在 App 中的 toggle() 措施也稍作篡改,定义在组件内了。toggle() 调用的时刻会改动表示是否完成的 done 的值。但因为 done 是定义金库lg电子游戏平台网址在 props 中的属性,不能直接赋值,以是采纳了官方保举的第一种措施,定义一个数据 isDone,初始化为 this.done,并在组件内应用 isDone 来节制是否完成这一状态。

响应的 App 部分的模板和代码精减了不少:

Todos:

new Vue({

el: "#app",

data: {

todos: [

{ text: "Learn JavaScript", done: false },

{ text: "Learn Vue", done: false },

{ text: "Play around in JSFiddle", done: true },

{ text: "Build something awesome", done: true }

]

}

});

不过到此为止,数据仍旧是单向的。从效果上来看,点击复选框可以反馈出删除线线效果,但这些动态变更都是在 todo 组件内部完成的,不存在数据绑定的问题。

为 Todo List 添加计数

发表评论
加载中...

相关文章