Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架。与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计。Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。另一方面,Vue 完全有能力驱动采用单文件组件和 Vue 生态系统支持的库开发的复杂单页应用。
Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。
刚开始接触,就跟着文档写了一些小的实现demo:
首先,进入工程learn vue/demo/目录下,然后在此目录下新建demo1.html,然后就可以在里面写代码了。
下载vue,我使用npm install来安装vue的,因此就这样引进html文档里:
< script src = "./node_modules/vue/dist/vue.js" > </script> /
注意:这个要放在html底下的,因为渲染页面是遵循html从上向下依次读取的,如果顺序放错,会出现错误提示。
- 声明式渲染
Vue.js 的核心是一个允许你采用简洁的模板语法来声明式的将数据渲染进 DOM 的系统:
将数据和 DOM 已经被绑定在一起,所有的元素都是响应式的。
除了绑定插入的文本内容,还可以通过v-bind来绑定 DOM 元素属性。v-bind 属性被称为指令。指令带有前缀 v-,以表示它们是 Vue.js 提供的特殊属性。 - 条件与循环
v-if
v-for - 处理用户输入(按钮、表单)
·为了让用户和你的应用进行互动,我们可以用 v-on 指令绑定一个监听事件用于调用我们 Vue 实例中定义的方法,如:click。
·Vue 也提供了** v-model** 指令,它使得在表单输入和应用状态中做双向数据绑定变得非常轻巧。 - 用组件构建(应用)
组件系统是 Vue.js 另一个重要概念,因为它提供了一种抽象,让我们可以用独立可复用的小组件来构建大型应用。
在 Vue 里,一个组件实质上是一个拥有预定义选项的一个 Vue 实例:
// Define a new component called todo-item
Vue.component('todo-item', {
template: '<li>This is a todo</li>'
})
现在你可以在另一个组件模板中写入它:
<ol>
<!-- Create an instance of the todo-item component -->
<todo-item></todo-item>
</ol>
但是这样会为每个 todo 渲染同样的文本,我们应该将数据从父作用域传到子组件。那就修改一下组件的定义,使得它能够接受一个 prop
字段:
Vue.component('todo-item', {
// The todo-item component now accepts a
// "prop", which is like a custom attribute.
// This prop is called todo.
props: ['todo'],
template: '<li>{{ todo.text }}</li>'
})
现在,就可以使用 v-bind 指令将 todo 传到每一个重复的组件中:
<div id="app-7">
<ol>
<!-- Now we provide each todo-item with the todo object -->
<!-- it's representing, so that its content can be dynamic -->
<todo-item v-for="item in groceryList" v-bind:todo="item"></todo-item>
</ol>
</div>
Vue.component('todo-item', {
props: ['todo'],
template: '<li>{{ todo.text }}</li>'
}) var app7 = new Vue({
el: '#app-7',
data: {
groceryList: [{
text: 'Vegetables'
},
{
text: 'Cheese'
},
{
text: 'Whatever else humans are supposed to eat'
}]
}
})
这是一个简单的例子,将应用分割成了两个更小的单元,子元素通过 props 接口实现了与父亲元素很好的解耦。我们现在可以在不影响到父应用的基础上,进一步为我们的 todo 组件改进更多复杂的模板和逻辑。
下面是demo1.html的所有demo代码:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8" />
<title></title>
</head>
<body>
<div>
<!-- 1111111-->
<div id="hello">
<p>{{message1}}</p>
</div>
<!--2222222-->
<div id="hover">
<p v-bind:title="message2"> Hover your mouse over me for a few seconds to see my dynamically bound title!</p>
</div>
<!-- 控制元素的显示-->
<div id="app-3">
<p v-if="seen">you can see me ~~~~</p>
</div>
<div id="app-4">
<ol>
<li v-for="todo in todos"> {{todo.text}} </li>
</ol>
</div>
<div id="app-5">
<p>{{message5}}</p>
<button v-on:click="reverseMessage5">reverse message5</button>
</div>
<div id="app-6">
<p>{{message6}}</p>
<input v-model="message6" />
</div>
<div id="app-7">
<ol>
<li v-for="item in groceryList">{{item.text}}</li>
<todo-item v-for="item in groceryList" v-bind:todo="item"></todo-item>
</ol>
</div>
</div>
<script src="./node_modules/vue/dist/vue.js"></script>
<script type="text/javascript">
var a1 = new Vue({
el:'#hello',
data:{
message1:'hello good vue!'
}
});
var a2 = new Vue({
el:'#hover',
data:{
message2:"you loaded this page on" +new Date()
}
});
var a3 = new Vue({
el:'#app-3',
data:{
seen:true
}
});
var a4 = new Vue({
el:'#app-4',
data:{
todos:[
{text:'good javascrilpt'},
{text:'good vue.js'},
{text:'good applications'}
]
}
});
a4.todos.pop();
var a5 = new Vue({
el:'#app-5',
data:{
message5:'wang qi'
},
methods:{
reverseMessage5:function(){
this.message5 = this.message5.split('').reverse().join('');
}
}
});
var a6 = new Vue({
el:'#app-6',
data:{
message6:'你好啊!!!'
}
});
Vue.component('todo-item',{
props:['todo'],
template:'<li>{{todo.text}}</li>'
});
var a7 = new Vue({
el:'#app-7',
data:{
groceryList:[
{ text:'Vegetables'},
{ text:'Cheese' },
{ text:'potato' }
]
}
});
</script>
</body>
</html>
持之以恒,一步一个脚印。。。。。。
网友评论