<html lang="en">
<head>
<meta charset="UTF-8">
<title>Documenttitle>
head>
<body>
<div id="app">{{message}}div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.min.js">script>
<script>
// 定义一个vue实例对象
var vue = new Vue({
// 绑定元素
el:'#app',
// 定义参数并且赋值
data:{
message:"hello vue"
}
});
script>
body>
html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Documenttitle>
head>
<body>
<div id="app">
<span v-bind:title="message">鼠标悬停span>
div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.min.js">script>
<script>
// 定义一个vue实例对象
var vue = new Vue({
// 绑定元素
el:'#app',
// 定义参数并且赋值
data:{
message:new Date().toLocaleString()
}
});
script>
body>
html>
v-bind
attribute 被称为指令。指令带有前缀 v-
,以表示它们是 Vue 提供的特殊 attribute。它们会在渲染的 DOM 上应用特殊的响应式行为。在这里,该指令的意思是:“将这个元素节点的 title
attribute 和 Vue 实例的 message
property 保持一致”。
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Documenttitle>
head>
<body>
<div id="app">
<span v-if="flag">你能看到我span>
div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.min.js">script>
<script>
// 定义一个vue实例对象
var vue = new Vue({
// 绑定元素
el:'#app',
// 定义参数并且赋值
data:{
flag:true
}
});
script>
body>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Documenttitle>
head>
<body>
<div id="app">
性别
<span v-if="flag">男span>
<span v-else="flag">女span>
div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.min.js">script>
<script>
// 定义一个vue实例对象
var vue = new Vue({
// 绑定元素
el:'#app',
// 定义参数并且赋值
data:{
flag:true
}
});
script>
body>
html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Documenttitle>
head>
<body>
<div id="app">
类型
<span v-if="type==='A'">Aspan>
<span v-else-if="type==='B'">Bspan>
<span v-else="type==='C'">Cspan>
div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.min.js">script>
<script>
// 定义一个vue实例对象
var vue = new Vue({
// 绑定元素
el:'#app',
// 定义参数并且赋值
data:{
type:'A'
}
});
script>
body>
html>
我们可以用 v-for
指令基于一个数组来渲染一个列表。v-for
指令需要使用 item in items
形式的特殊语法,其中 items
是源数据数组,而 item
则是被迭代的数组元素的别名
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Documenttitle>
head>
<body>
<div id="app">
开发语言
<ul>
<li v-for="language in languages">
{{language.text}}
li>
ul>
div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.min.js">script>
<script>
// 定义一个vue实例对象
var vue = new Vue({
// 绑定元素
el:'#app',
// 定义参数并且赋值
data:{
languages:[
{ text: '学习 JavaScript' },
{ text: '学习 Vue' },
{ text: '整个牛项目' }
]
}
});
script>
body>
html>
测试:在F12控制台输入vue.languages.push({message:'xshell'})
,尝试追加一条数据,你会发现浏览器中显示的内容会增加一条数据。注意这里是体现vue的响应式而不是双向绑定
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<div id="app">
{{message}}
<button v-on:click="reverseMessage">反转消息button>
div>
head>
<body>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.min.js">script>
<script>
var test = new Vue({
el:"#app",
data:{
message:"hello"
},
// 自定义方法
methods:{
reverseMessage:function () {
this.message=this.message.split('').reverse().toString();
}
}
})
script>
body>
html>
数据双向绑定, 即当数据发生变化的时候, 视图也就发生变化, 当视图发生变化的时候,数据也会跟着同步变化。这也算是Vue.js的精髓之处了。值得注意的是,我们所说的数据双向绑定,一定是对于UI控件来说的非UI控件不会涉及到数据双向绑定。单向数据绑定是使用状态管理工具的前提。如果我们使用vuex那么数据流也是单项的,这时就会和双向数据绑定有冲突。
在Vue.js
中,如果使用vuex
, 实际上数据还是单向的, 之所以说是数据双向绑定,这是用的UI控件来说, 对于我们处理表单, Vue.js
的双向数据绑定用起来就特别舒服了。即两者并不互斥,在全局性数据流使用单项,方便跟踪;局部性数据流使用双向,简单易操作。
你可以用 v-model
指令在表单及元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。尽管有些神奇,但 v-model
本质上不过是语法糖。它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理。
<html lang="en" xmlns:v-model="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<div id="app">
姓名:<input v-model="message"/>
输入的姓名是:{{message}}
div>
<body>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.min.js">script>
<script>
var vue = new Vue({
el:"#app",
data:{
message:""
}
})
script>
body>
html>
<html lang="en" xmlns:v-model="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<div id="app">
<textarea v-model="message">textarea>
输入的值:{{message}}
div>
<body>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.min.js">script>
<script>
var vue = new Vue({
el:"#app",
data:{
message:""
}
})
script>
body>
html>
<html lang="en" xmlns:v-model="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<div id="app">
<input type="checkbox" v-model="message">
是否选择:{{message}}
div>
<body>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.min.js">script>
<script>
var vue = new Vue({
el:"#app",
data:{
message:false
}
})
script>
body>
html>
<html lang="en" xmlns:v-model="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<div id="app">
喜欢的语言:
java<input type="checkbox" v-model="message" id="jack" value="java">
linux<input type="checkbox" v-model="message" id="john" value="linux">
xshell<input type="checkbox" v-model="message" id="mike" value="xshell">
选择的是:{{message}}
div>
<body>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.min.js">script>
<script>
var vue = new Vue({
el:"#app",
data:{
message:[]
}
})
script>
body>
html>
<html lang="en" xmlns:v-model="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<div id="app">
性别:
男<input type="radio" value="男" id="man" name="sex" v-model="message" checked>
女<input type="radio" value="女" id="woman" name="sex" v-model="message">
选择的是{{message}}
div>
<body>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.min.js">script>
<script>
var vue = new Vue({
el:"#app",
data:{
message:""
}
})
script>
body>
html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<div id="app">
<select v-model="selected">
<option disabled value="">请选择option>
<option>Aoption>
<option>Boption>
<option>Coption>
select>
选择的是:{{selected}}
div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.min.js">script>
<script>
var vue = new Vue({
el:"#app",
data:{
selected:""
}
})
script>
body>
html>
注意点:如果 v-model
表达式的初始值未能匹配任何选项,元素将被渲染为“未选中”状态。在 iOS 中,这会使用户无法选择第一个选项。因为这样的情况下,iOS 不会触发 change 事件。因此,更推荐像上面这样提供一个值为空的禁用选项。
v-bind
和v-model
组件是可复用的 Vue 实例,通俗的讲就是一组可以重复使用的模板,类似于java中的方法甚至于是类,因为组件是可复用的 Vue 实例,所以它们与 new Vue
接收相同的选项,例如 data
、computed
、watch
、methods
以及生命周期钩子等。
通常一个应用会以一棵嵌套的组件树的形式来组织,如下所述:
例如,你可能会有页头、侧边栏、内容区等组件,每个组件又包含了其它的像导航链接、博文之类的组件。
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<div id="app">
<Comp>Comp>
div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.min.js">script>
<script>
// 全局注册 Comp自定义组件别名
Vue.component("Comp",{
// 展示模板
template:"hello
"
})
// 再实例化
var vue = new Vue({
el:"#app"
})
script>
body>
html>
方法描述:
Vue.component()
:全局注册一个组件Comp
:自定义组件的名字template
:组件的模板内容注意点:
在日常开发中,组件大多数情况下要进行参数的传递,所以推出组件的属性props
,这个组件可以在vue实例和组件中进行参数的传递
注意:传递的参数名不要用驼峰命名,或者是大写的形式,因为HTML代码中的特性名是大小写不敏感的,所以浏览器会把所有大写字符解释为小写字符这个时候和组件中的名字不匹配就会取不到值
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<div id="app">
<comp v-bind:componentparam="vueparam">comp>
div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.min.js">script>
<script>
// comp组件名可以用于引用组件
Vue.component("comp",{
props: {
// 自定义接收参数名
componentparam:''
},
template: 'hello {{componentparam}}
'
})
var vue = new Vue({
el:"#app",
data:{
vueparam:"测试"
}
})
script>
body>
html>