Vue介绍-Vue简单应用-Vue基本用法

什么是Vue

1、Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架。
2、Vue 只关注视图层, 采用自底向上增量开发的设计。
3、Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

Vue可以用来做什么?

Vue可以做从简单到复杂的前端单页应用,随处可见的Web前端都可以用Vue来开发。

为什么使用Vue?

1、轻量级
2、js语法
3、入门及上手快

vue与Jquery比较?

1、jquery关注dom
2、vue关注数据,不关注dom

Vue.js 安装

使用 <script> 标签引入。

Vue的书写格式


    
    
  1. <div id="vue_det">
  2. <h1>{{details()}} </h1> <!--使用两个括号来展示数据-->
  3. </div>
  4. <script type="text/javascript">
  5. var vm = new Vue({
  6. el: '#vue_det', //表明作用域
  7. data: { //存储数据
  8. ………
  9. },
  10. methods: { //事件处理方法
  11. details: function() {
  12. ……
  13. }
  14. }
  15. })
  16. </script>

Vue的对象

1、el:Vue的作用域,即只有在这个作用域里面的dom受Vue控制
2、data:vue页面的数据模型,该数据模型为一个javascript对象,且在运行过程中该对象的属性不允许增加,因此页面数据模型必须提前定义好
3、methods:事件处理方法对象

数据绑定

1、数据绑定最常见的形式就是使用 {{...}}(双大括号)的文本插值

2、使用 v-html 指令用于输出 html 代码
示例:  

    
    
  1. <div id="app">
  2. <div v-html="message"> </div>
  3. </div>
  4. <script>
  5. new Vue({
  6. el: '#app',
  7. data: {
  8. message: '<h1>Vue</h1>'
  9. }
  10. })
  11. </script>
3、HTML 属性中的值应使用 v-bind 指令,参数在指令后以冒号指明。
示例

    
    
  1. <div id="app">
  2. <pre> <a v-bind:href="url"> 百度 </a> </pre>
  3. </div>
  4. <script>
  5. new Vue({
  6. el: '#app',
  7. data: {
  8. url: 'http://www.baidu.com'
  9. }
  10. })
  11. </script>
4、 v-model 指令来实现双向数据绑定

5、 v-on 指令,它用于监听 DOM 事件

过滤器(可以接受参数)

示例

    
    
  1. <div id="app">
  2. {{ message | capitalize }}
  3. <div v-bind:id="rawId | formatId"> </div>
  4. </div>
  5. <script>
  6. new Vue({
  7. el: '#app',
  8. data: {
  9. message: 'runoob'
  10. },
  11. filters: { //过滤器都书写在这个关键字里面
  12. capitalize: function (value) { //过滤器函数接受表达式的值作为第一个参数。
  13. if (!value) return ''
  14. value = value.toString()
  15. return value.charAt( 0).toUpperCase() + value.slice( 1)
  16. }
  17. }
  18. })
  19. </script>

条件语句

1、v-if
2、v-else
3、v-else-if
4、v-show
注意:v-else 、v-else-if 必须跟在 v-if 或者 v-else-if之后。
示例

    
    
  1. <div id="app">
  2. <h1 v-show="true">Hello! </h1>
  3. <div v-if="type === 'A'">
  4. A
  5. </div>
  6. <div v-else-if="type === 'B'">
  7. B
  8. </div>
  9. <div v-else-if="type === 'C'">
  10. C
  11. </div>
  12. <div v-else>
  13. Not A/B/C
  14. </div>
  15. </div>
  16. <script>
  17. new Vue({
  18. el: '#app',
  19. data: {
  20. type: 'C'
  21. }
  22. })
  23. </script>

v-if 和 v-show的区别

(1)手段:
v-if是动态的向DOM树内添加或者删除DOM元素;
v-show是通过设置DOM元素的display样式属性控制显隐;
(2)编译过程:
v-if切换有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的事件监听和子组件;
v-show只是简单的基于css切换;
(3)编译条件:
v-if是惰性的,如果初始条件为假,则什么也不做;只有在条件第一次变为真时才开始局部编译(编译被缓存?编译被缓存后,然后再切换的时候进行局部卸载);
v-show是在任何条件下(首次条件是否为真)都被编译,然后被缓存,而且DOM元素保留;
(4)性能消耗:
v-if有更高的切换消耗;
v-show有更高的初始渲染消耗;
(5)使用场景:
v-if适合运营条件不大可能改变;
v-show适合频繁切换。

循环语句

循环使用 v-for 指令。
示例

    
    
  1. <div id="app">
  2. <ol>
  3. <li v-for="site in sites"> //固定写法 参数 in 数组/对象…
  4. {{ site.name }}
  5. </li>
  6. </ol>
  7. <ul>
  8. <li v-for="(value, key) in sites">
  9. {{ key }} : {{ value }}
  10. </li>
  11. </ul>
  12. <ul>
  13. <li v-for="(value, key, index) in sites">
  14. {{ index }}. {{ key }} : {{ value }}
  15. </li>
  16. </ul>
  17. </div>
  18. <script>
  19. new Vue({
  20. el: '#app',
  21. data: {
  22. sites: [
  23. { name: 'Runoob' },
  24. { name: 'Google' },
  25. { name: 'Taobao' }
  26. ]
  27. }
  28. })
  29. </script>

样式绑定

一、Class属性绑定

1、行内对象绑定

    
    
  1. <style>
  2. .active {
  3. width: 100px;
  4. height: 100px;
  5. background: green;
  6. }
  7. </style>
  8. <div id="app">
  9. <div v-bind:class="{ active: isActive }"> </div>
  10. </div>
  11. <script>
  12. new Vue({
  13. el: '#app',
  14. data: {
  15. isActive: true
  16. }
  17. })
  18. </script>
2、预定义对象绑定

    
    
  1. <style>
  2. .active {
  3. width: 100px;
  4. height: 100px;
  5. background: green;
  6. }
  7. .text-danger {
  8. background: red;
  9. }
  10. </style>
  11. <div id="app">
  12. <div v-bind:class="classObject"> </div> //直接绑定对象
  13. </div>
  14. <script>
  15. new Vue({
  16. el: '#app',
  17. data: {
  18. classObject: {
  19. active: true,
  20. 'text-danger': true
  21. }
  22. }
  23. })
  24. </script>
3、数组绑定

    
    
  1. <style>
  2. .active {
  3. width: 100px;
  4. height: 100px;
  5. background: green;
  6. }
  7. .text-danger {
  8. background: red;
  9. }
  10. <body>
  11. <div id="app">
  12. <div v-bind:class="[activeClass, errorClass]"> </div>
  13. </div>
  14. <script>
  15. new Vue({
  16. el: '#app',
  17. data: {
  18. activeClass: 'active',
  19. errorClass: 'text-danger'
  20. }
  21. })
  22. </script>

二、style属性绑定

1、行内对象绑定

    
    
  1. <div id="app">
  2. <div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }">123 </div>
  3. </div>
  4. <script>
  5. new Vue({
  6. el: '#app',
  7. data: {
  8. activeColor: 'green',
  9. fontSize: 30
  10. }
  11. })
  12. </script>
2、预定义对象绑定

    
    
  1. <div id="app">
  2. <div v-bind:style="styleObject">123 </div>
  3. </div>
  4. <script>
  5. new Vue({
  6. el: '#app',
  7. data: {
  8. styleObject: {
  9. color: 'green',
  10. fontSize: '30px'
  11. }
  12. }
  13. })
  14. </script>
3、数组绑定

    
    
  1. <div id="app">
  2. <div v-bind:style="[baseStyles, overridingStyles]">123 </div>
  3. </div>
  4. <script>
  5. new Vue({
  6. el: '#app',
  7. data: {
  8. baseStyles: {
  9. color: 'green',
  10. fontSize: '30px'
  11. },
  12. overridingStyles: {
  13. 'font-weight': 'bold'
  14. }
  15. }
  16. })
  17. </script>

Vue初始化方法

Mounted
在vue初始化完成后调用该方法,一般用于vue初始化完成后需要自动执行的代码。
示例

    
    
  1. new Vue({
  2. el: '#app',
  3. data: {
  4. totalMoney: 0,
  5. productList: []
  6. },
  7. filters: {
  8. },
  9. mounted: function() {
  10. //书写需要自动执行的代码
  11. }
  12. });

v-model 指令在表单控件元素上创建双向数据绑定

一、单选框和复选框

示例

    
    
  1. <div id="app">
  2. <p>单个复选框: </p>
  3. <input type="checkbox" id="checkbox" value="asd" v-model="checked">
  4. <label for="checkbox">{{ checked }} </label>
  5. <p>多个复选框: </p>
  6. <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
  7. <label for="runoob">Runoob </label>
  8. <input type="checkbox" id="google" value="Google" v-model="checkedNames">
  9. <label for="google">Google </label>
  10. <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
  11. <label for="taobao">taobao </label>
  12. <br>
  13. <span>选择的值为: {{ checkedNames }} </span>
  14. </div>
  15. <script>
  16. new Vue({
  17. el: '#app',
  18. data: {
  19. checked : 123,
  20. checkedNames: [ 1]
  21. }
  22. })
  23. </script>
注意
1、checked的值根据勾选状态的不同而改变,但不是true就是false
2、checkedNames是一个数组,里面元素包含的是你选中的的复选框的所有的value


二、下拉菜单

示例

    
    
  1. <div id="app">
  2. <select v-model="selected" name="fruit">
  3. <option value="">选择一个网站 </option>
  4. <option value="www.runoob.com">Runoob </option>
  5. <option value="www.google.com">Google </option>
  6. </select>
  7. <div id="output">
  8. 选择的网站是: {{selected}}
  9. </div>
  10. </div>
  11. <script>
  12. new Vue({
  13. el: '#app',
  14. data: {
  15. selected: ''
  16. }
  17. })
  18. </script>
注意
根据你选中的哪个option,然后你绑定的模板所对应的值就是你选中的那个option的value


Vue的组件

书写格式
Vue.component('组件名',{props:['属性名'],template:'模板内容'})

1、组件的简单书写格式


    
    
  1. <div id="app">
  2. <runoob> </runoob> <!--自定义组件的是使用-->
  3. </div>
  4. <script>
  5. Vue.component( 'runoob', { //自定义组件
  6. template: '<h1>自定义组件!</h1>'
  7. })
  8. new Vue({
  9. el: '#app'
  10. })
  11. </script>

2、新建一个.js文件,将Vue的组件书写在这个文件中,使用<script> 标签引入

1)新建.js文件

    
    
  1. Vue.component( 'my-clock',{
  2. props:[
  3. 'format' //自定义组件的属性,可以用来传递值
  4. ],
  5. template: '<h3>{{d|formatdate(format)}}</h3>', //将值传递给过滤器使用
  6. filters:{
  7. formatdate: function(d,frm){
  8. var dt= d.getFullYear()+ '-'+(d.getMonth()+ 1)+ '-'+d.getDate();
  9. var tm=d.getHours()+ ':'+d.getMinutes()+ ':'+d.getSeconds();
  10. if(frm== 'date'){
  11. return dt;
  12. } else if(frm== 'time'){
  13. return tm
  14. } else{
  15. return dt+ ' '+tm
  16. }
  17. }
  18. },
  19. data: function(){ //必须使用函数 将数据进行隔离,否则多个位置使用同一个组件数据会共享
  20. return {
  21. d: new Date() }
  22. },
  23. methods:{
  24. updatetime: function (){
  25. this.d= new Date()
  26. }
  27. },
  28. mounted: function (){
  29. setInterval( this.updatetime, 1000);
  30. }
  31. });
2)引入.js文件,并使用自定义组件

    
    
  1. <script src="js/vue_00.js"> </script>
  2. <div id="qwee">
  3. <my-clock format="data"> </my-clock>
  4. </div>
  5. <script>
  6. new Vue({
  7. el: "#qwee"
  8. })
  9. </script>

什么是Vue

1、Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架。
2、Vue 只关注视图层, 采用自底向上增量开发的设计。
3、Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

Vue可以用来做什么?

Vue可以做从简单到复杂的前端单页应用,随处可见的Web前端都可以用Vue来开发。

为什么使用Vue?

1、轻量级
2、js语法
3、入门及上手快

vue与Jquery比较?

1、jquery关注dom
2、vue关注数据,不关注dom

Vue.js 安装

使用 <script> 标签引入。

Vue的书写格式


  
  
  1. <div id="vue_det">
  2. <h1>{{details()}} </h1> <!--使用两个括号来展示数据-->
  3. </div>
  4. <script type="text/javascript">
  5. var vm = new Vue({
  6. el: '#vue_det', //表明作用域
  7. data: { //存储数据
  8. ………
  9. },
  10. methods: { //事件处理方法
  11. details: function() {
  12. ……
  13. }
  14. }
  15. })
  16. </script>

Vue的对象

1、el:Vue的作用域,即只有在这个作用域里面的dom受Vue控制
2、data:vue页面的数据模型,该数据模型为一个javascript对象,且在运行过程中该对象的属性不允许增加,因此页面数据模型必须提前定义好
3、methods:事件处理方法对象

数据绑定

1、数据绑定最常见的形式就是使用 {{...}}(双大括号)的文本插值

2、使用 v-html 指令用于输出 html 代码
示例:  

  
  
  1. <div id="app">
  2. <div v-html="message"> </div>
  3. </div>
  4. <script>
  5. new Vue({
  6. el: '#app',
  7. data: {
  8. message: '<h1>Vue</h1>'
  9. }
  10. })
  11. </script>
3、HTML 属性中的值应使用 v-bind 指令,参数在指令后以冒号指明。
示例

  
  
  1. <div id="app">
  2. <pre> <a v-bind:href="url"> 百度 </a> </pre>
  3. </div>
  4. <script>
  5. new Vue({
  6. el: '#app',
  7. data: {
  8. url: 'http://www.baidu.com'
  9. }
  10. })
  11. </script>
4、 v-model 指令来实现双向数据绑定

5、 v-on 指令,它用于监听 DOM 事件

过滤器(可以接受参数)

示例

  
  
  1. <div id="app">
  2. {{ message | capitalize }}
  3. <div v-bind:id="rawId | formatId"> </div>
  4. </div>
  5. <script>
  6. new Vue({
  7. el: '#app',
  8. data: {
  9. message: 'runoob'
  10. },
  11. filters: { //过滤器都书写在这个关键字里面
  12. capitalize: function (value) { //过滤器函数接受表达式的值作为第一个参数。
  13. if (!value) return ''
  14. value = value.toString()
  15. return value.charAt( 0).toUpperCase() + value.slice( 1)
  16. }
  17. }
  18. })
  19. </script>

条件语句

1、v-if
2、v-else
3、v-else-if
4、v-show
注意:v-else 、v-else-if 必须跟在 v-if 或者 v-else-if之后。
示例

  
  
  1. <div id="app">
  2. <h1 v-show="true">Hello! </h1>
  3. <div v-if="type === 'A'">
  4. A
  5. </div>
  6. <div v-else-if="type === 'B'">
  7. B
  8. </div>
  9. <div v-else-if="type === 'C'">
  10. C
  11. </div>
  12. <div v-else>
  13. Not A/B/C
  14. </div>
  15. </div>
  16. <script>
  17. new Vue({
  18. el: '#app',
  19. data: {
  20. type: 'C'
  21. }
  22. })
  23. </script>

v-if 和 v-show的区别

(1)手段:
v-if是动态的向DOM树内添加或者删除DOM元素;
v-show是通过设置DOM元素的display样式属性控制显隐;
(2)编译过程:
v-if切换有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的事件监听和子组件;
v-show只是简单的基于css切换;
(3)编译条件:
v-if是惰性的,如果初始条件为假,则什么也不做;只有在条件第一次变为真时才开始局部编译(编译被缓存?编译被缓存后,然后再切换的时候进行局部卸载);
v-show是在任何条件下(首次条件是否为真)都被编译,然后被缓存,而且DOM元素保留;
(4)性能消耗:
v-if有更高的切换消耗;
v-show有更高的初始渲染消耗;
(5)使用场景:
v-if适合运营条件不大可能改变;
v-show适合频繁切换。

循环语句

循环使用 v-for 指令。
示例

  
  
  1. <div id="app">
  2. <ol>
  3. <li v-for="site in sites"> //固定写法 参数 in 数组/对象…
  4. {{ site.name }}
  5. </li>
  6. </ol>
  7. <ul>
  8. <li v-for="(value, key) in sites">
  9. {{ key }} : {{ value }}
  10. </li>
  11. </ul>
  12. <ul>
  13. <li v-for="(value, key, index) in sites">
  14. {{ index }}. {{ key }} : {{ value }}
  15. </li>
  16. </ul>
  17. </div>
  18. <script>
  19. new Vue({
  20. el: '#app',
  21. data: {
  22. sites: [
  23. { name: 'Runoob' },
  24. { name: 'Google' },
  25. { name: 'Taobao' }
  26. ]
  27. }
  28. })
  29. </script>

样式绑定

一、Class属性绑定

1、行内对象绑定

  
  
  1. <style>
  2. .active {
  3. width: 100px;
  4. height: 100px;
  5. background: green;
  6. }
  7. </style>
  8. <div id="app">
  9. <div v-bind:class="{ active: isActive }"> </div>
  10. </div>
  11. <script>
  12. new Vue({
  13. el: '#app',
  14. data: {
  15. isActive: true
  16. }
  17. })
  18. </script>
2、预定义对象绑定

  
  
  1. <style>
  2. .active {
  3. width: 100px;
  4. height: 100px;
  5. background: green;
  6. }
  7. .text-danger {
  8. background: red;
  9. }
  10. </style>
  11. <div id="app">
  12. <div v-bind:class="classObject"> </div> //直接绑定对象
  13. </div>
  14. <script>
  15. new Vue({
  16. el: '#app',
  17. data: {
  18. classObject: {
  19. active: true,
  20. 'text-danger': true
  21. }
  22. }
  23. })
  24. </script>
3、数组绑定

  
  
  1. <style>
  2. .active {
  3. width: 100px;
  4. height: 100px;
  5. background: green;
  6. }
  7. .text-danger {
  8. background: red;
  9. }
  10. <body>
  11. <div id="app">
  12. <div v-bind:class="[activeClass, errorClass]"> </div>
  13. </div>
  14. <script>
  15. new Vue({
  16. el: '#app',
  17. data: {
  18. activeClass: 'active',
  19. errorClass: 'text-danger'
  20. }
  21. })
  22. </script>

二、style属性绑定

1、行内对象绑定

  
  
  1. <div id="app">
  2. <div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }">123 </div>
  3. </div>
  4. <script>
  5. new Vue({
  6. el: '#app',
  7. data: {
  8. activeColor: 'green',
  9. fontSize: 30
  10. }
  11. })
  12. </script>
2、预定义对象绑定

  
  
  1. <div id="app">
  2. <div v-bind:style="styleObject">123 </div>
  3. </div>
  4. <script>
  5. new Vue({
  6. el: '#app',
  7. data: {
  8. styleObject: {
  9. color: 'green',
  10. fontSize: '30px'
  11. }
  12. }
  13. })
  14. </script>
3、数组绑定

  
  
  1. <div id="app">
  2. <div v-bind:style="[baseStyles, overridingStyles]">123 </div>
  3. </div>
  4. <script>
  5. new Vue({
  6. el: '#app',
  7. data: {
  8. baseStyles: {
  9. color: 'green',
  10. fontSize: '30px'
  11. },
  12. overridingStyles: {
  13. 'font-weight': 'bold'
  14. }
  15. }
  16. })
  17. </script>

Vue初始化方法

Mounted
在vue初始化完成后调用该方法,一般用于vue初始化完成后需要自动执行的代码。
示例

  
  
  1. new Vue({
  2. el: '#app',
  3. data: {
  4. totalMoney: 0,
  5. productList: []
  6. },
  7. filters: {
  8. },
  9. mounted: function() {
  10. //书写需要自动执行的代码
  11. }
  12. });

v-model 指令在表单控件元素上创建双向数据绑定

一、单选框和复选框

示例

  
  
  1. <div id="app">
  2. <p>单个复选框: </p>
  3. <input type="checkbox" id="checkbox" value="asd" v-model="checked">
  4. <label for="checkbox">{{ checked }} </label>
  5. <p>多个复选框: </p>
  6. <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
  7. <label for="runoob">Runoob </label>
  8. <input type="checkbox" id="google" value="Google" v-model="checkedNames">
  9. <label for="google">Google </label>
  10. <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
  11. <label for="taobao">taobao </label>
  12. <br>
  13. <span>选择的值为: {{ checkedNames }} </span>
  14. </div>
  15. <script>
  16. new Vue({
  17. el: '#app',
  18. data: {
  19. checked : 123,
  20. checkedNames: [ 1]
  21. }
  22. })
  23. </script>
注意
1、checked的值根据勾选状态的不同而改变,但不是true就是false
2、checkedNames是一个数组,里面元素包含的是你选中的的复选框的所有的value


二、下拉菜单

示例

  
  
  1. <div id="app">
  2. <select v-model="selected" name="fruit">
  3. <option value="">选择一个网站 </option>
  4. <option value="www.runoob.com">Runoob </option>
  5. <option value="www.google.com">Google </option>
  6. </select>
  7. <div id="output">
  8. 选择的网站是: {{selected}}
  9. </div>
  10. </div>
  11. <script>
  12. new Vue({
  13. el: '#app',
  14. data: {
  15. selected: ''
  16. }
  17. })
  18. </script>
注意
根据你选中的哪个option,然后你绑定的模板所对应的值就是你选中的那个option的value


Vue的组件

书写格式
Vue.component('组件名',{props:['属性名'],template:'模板内容'})

1、组件的简单书写格式


  
  
  1. <div id="app">
  2. <runoob> </runoob> <!--自定义组件的是使用-->
  3. </div>
  4. <script>
  5. Vue.component( 'runoob', { //自定义组件
  6. template: '<h1>自定义组件!</h1>'
  7. })
  8. new Vue({
  9. el: '#app'
  10. })
  11. </script>

2、新建一个.js文件,将Vue的组件书写在这个文件中,使用<script> 标签引入

1)新建.js文件

  
  
  1. Vue.component( 'my-clock',{
  2. props:[
  3. 'format' //自定义组件的属性,可以用来传递值
  4. ],
  5. template: '<h3>{{d|formatdate(format)}}</h3>', //将值传递给过滤器使用
  6. filters:{
  7. formatdate: function(d,frm){
  8. var dt= d.getFullYear()+ '-'+(d.getMonth()+ 1)+ '-'+d.getDate();
  9. var tm=d.getHours()+ ':'+d.getMinutes()+ ':'+d.getSeconds();
  10. if(frm== 'date'){
  11. return dt;
  12. } else if(frm== 'time'){
  13. return tm
  14. } else{
  15. return dt+ ' '+tm
  16. }
  17. }
  18. },
  19. data: function(){ //必须使用函数 将数据进行隔离,否则多个位置使用同一个组件数据会共享
  20. return {
  21. d: new Date() }
  22. },
  23. methods:{
  24. updatetime: function (){
  25. this.d= new Date()
  26. }
  27. },
  28. mounted: function (){
  29. setInterval( this.updatetime, 1000);
  30. }
  31. });
2)引入.js文件,并使用自定义组件

  
  
  1. <script src="js/vue_00.js"> </script>
  2. <div id="qwee">
  3. <my-clock format="data"> </my-clock>
  4. </div>
  5. <script>
  6. new Vue({
  7. el: "#qwee"
  8. })
  9. </script>

猜你喜欢

转载自blog.csdn.net/u011280778/article/details/87715038