vue.js学习

Posted 花娣丫头小愤青

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue.js学习相关的知识,希望对你有一定的参考价值。

Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架。MVVM框架

Vue.js的目的:1、解决数据绑定的问题 2、开发Single Page Application(SPA)大型单页面应用。主要支持移动端,也支持PC端。 3、支持组件化,这样复用度高

MVVM模式:

  M:model 业务模型,用处:处理数据,提供数据

  V: view 用户界面、用户界面

M->V V->M

Vue.js 使用了基于 html 的模版语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。

Vue.js 的核心是一个允许你采用简洁的模板语法来声明式的将数据渲染进 DOM 的系统。

结合响应系统,在应用状态改变时, Vue 能够智能地计算出重新渲染组件的最小代价并应用到 DOM 操作上。

 使用Vue.js步驟:1、引入Vue.js 2、创建一个Vue对象,其中el代表Vue管理对象的界限。data是一个对象,用于存放显示在页面上的数据。

<!DOCTYPE html>
<html>
  <head>
    <title>test01.html</title>
    <script type="text/javascript" src="vue.min.js"></script>
  </head>
  
  <body>
    <div id="app">
          <p>{{ message }}</p>
    </div>
    <script>
        var appT=new Vue({
              el: \'#app\',
              data: {
            message: \'Hello Vue.js123!\'
          }
        })
    </script>
 </body>
</html>

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

如果后台改动message时,相应的页面也会随之变化。使用appT.message=“XXX”更改。每个 Vue 实例都会代理其 data 对象里所有的属性

Vue指令,其实就是vue当中以v-开头的自定义属性。

1、使用 v-html 指令用于输出 html 代码:

 <body>
    <div id="app" v-html="message"></div>
    <script>
        new Vue({
              el: \'#app\',
              data: {
            message: \'<h1>使用V-html</h1>\'
          }
        })
    </script>
 </body>
V-HTML

2、HTML 属性中的值应使用 v-bind 指令

<body>
    <div>
          <a  id="app" v-bind:href="url">{{text}}</a>
    </div>
    <script>
        new Vue({
              el: \'#app\',
              data: {
            url:\'http://www.baidu.com\',
            text:\'点击\'
          }
        })
    </script>
 </body>
v-bind:HTNL属性

 

<!-- 完整语法 -->
<a v-bind:href="url"></a>
<!-- 缩写 -->
<a :href="url"></a>

3、v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。指令用于在表达式的值改变时,将某些行为应用到 DOM 上。

 <body>
    <div>
          <P id="app" v-if="seen">你看见我了!</P>
    </div>
    <script>
        var appT=new Vue({
              el: \'#app\',
              data: {
            seen:true
          }
        })
    </script>
 </body>
v-if

该元素模块不存在了

 

4、v-show指令用来决定是否显示元素

 

 <body>
    <div id="app">
          <p v-show="seen">你看见我了</p>
    </div>
    <script>
        var appT=new Vue({
              el: \'#app\',
              data: {
            seen:true
          }
        })
    </script>
 </body>
v-show

该元素模块被设置为display:none。

v-if跟v-show的区别:

  v-if有更高的切换消耗,安全性更高。而v-show有更多的初始化渲染消耗。因此频繁切换而对安全性无要求可用v-show。如果在运行,条件不可改变,则用v-if比较好。

5、v-else必须跟在v-if后面,否则不能被识别。

  <body>
    <div id="app">
          <p v-if="seen">你看见我了</p>
          <p v-else>你看不见我了</p>
    </div>
    <script>
        var appT=new Vue({
              el: \'#app\',
              data: {
            seen:true
          }
        })
    </script>

 6、v-else-if

<body>
    <div id="app">
          <p v-if="type===\'A\'">A</p>
          <p v-else-if="type===\'B\'">B</p>
          <P v-else>C</P>
    </div>
    <script>
        var appT=new Vue({
              el: \'#app\',
              data: {
            type:\'A\'
          }
        })
    </script>
 </body>
View Code

 

7、在 input 输入框中我们可以使用 v-model 指令来实现双向数据绑定

<body>
    <div id="app">
          <p>{{message}}</p>
          <input v-model="message">
    </div>
    <script>
        var appT=new Vue({
              el: \'#app\',
              data: {
            message:\'hello world\'
          }
        })
    </script>
 </body>
V-MODEL

也就是说页面输入改动,对应的data数据也跟着改动

8、循环使用 v-for 指令。

v-for 指令需要以 site in sites 形式的特殊语法, sites 是源数据数组并且 site 是数组元素迭代的别名。

v-for 可以绑定数据到数组来渲染一个列表:

<body>
    <div id="app">
          <ui>
              <li v-for="person in persons">
                  {{person.name}},
                  {{person.old}},
                  {{person.sex}}
              </li>
          </ui>
    </div>
    <script>
        var appT=new Vue({
              el: \'#app\',
              data: {
            persons:[
            {name:\'wang1\',old:\'20\',sex:\'male\'},
            {name:\'wang2\',old:\'21\',sex:\'female\'}
            ]
          }
        })
    </script>
 </body>
View Code

9、v-for 可以通过一个对象的属性来迭代数据:

  <body>
    <div id="app">
          <ui>
              <li v-for="value in person1">
                  {{value}}
              </li>
          </ui>
          ---------------------------------------
          <oi>
              <li v-for="(value,key) in person2">
                  {{key}} --- {{value}}
              </li>
          </oi>
          ---------------------------------------
          <ui>
              <li v-for="(value,key,index) in person3">
                  {{index}}---{{key}}---{{value}}
              </li>
          </ui>
    </div>
    <script>
        var appT=new Vue({
              el: \'#app\',
              data: {
            person1:{name1:\'wang1\',old1:\'20\',sex1:\'male\'},
            person2:{name2:\'wang2\',old2:\'30\',sex2:\'female\'},
            person3:{name3:\'wang3\',old3:\'40\',sex3:\'male\'}               
          }
        })
    </script>
 </body>
v-for

10、v-for 也可以循环整数

  <body>
    <div id="app">
          <ui>
              <li v-for="n in 10">
                  {{n}}
              </li>
          </ui>
    </div>
    <script>
        var appT=new Vue({
              el: \'#app\',
              data: {}
        })
    </script>
 </body>
n in num

 11、Vue.js 计算属性

  <body>
    <div id="app">
          直接逻辑:{{ message.split(\'\').reverse().join(\'\') }}<br>
          计算属性关键字computed:{{reverseMessage1}} <br>
          method:{{reverseMessage2()}}
    </div>
    <script>
        var appT=new Vue({
              el: \'#app\',
              data: {
                  message:\'HelloWorld!\'
              },
              computed:{
                  reverseMessage1:function(){
                      return this.message.split(\'\').reverse().join(\'\')
                  }
              },
              methods:{
                  reverseMessage2:function(){
                      return this.message.split(\'\').reverse().join(\'\')
                  }
              }            
        })
    </script>
 </body>
View Code

我们可以使用 methods 来替代 computed,效果上两个都是一样的,但是 computed 是基于它的依赖缓存,只有相关依赖发生改变时才会重新取值。而使用 methods ,在重新渲染的时候,函数总会重新调用执行。

12、Vue.js class

class 与 style 是 HTML 元素的属性,用于设置元素的样式,我们可以用 v-bind 来设置样式属性。

Vue.js v-bind 在处理 class 和 style 时, 专门增强了它。表达式的结果类型除了字符串之外,还可以是对象或数组。

 

<script type="text/javascript" src="vue.min.js"></script>
    <style type="text/css">
        .active{
            width:100px;
            height:100px;
            background:green;
        }  
    </style>
  </head>
  <body>
    <div id="app">
          <div v-bind:class="{active:isActive}"></div>
    </div>
    <script>
        var appT=new Vue({
              el: \'#app\',
              data: {
                  isActive:true
              }            
        })
    </script>
1

我们也可以在对象中传入更多属性用来动态切换多个 class 。

    <script type="text/javascript" src="vue.min.js"></script>
    <style type="text/css">
        .active{
            width:100px;
            height:100px;
            background:green;
        } 
        .err{
            width:20px;
            height:20px;
            background:red;
        } 
    </style>
  </head>
  <body>
    <div id="app">
          <div v-bind:class="{active:isActive,\'err\':isErr}"></div>
    </div>
    <script>
        var appT=vue.js 2 - 将单个文件组件的 html 片段提取到独立文件中

使用 Vue 模板清晰地分离视图和代码

第1129期对vue.js单文件(.vue)进行单元测试

vue.js功能学习

vue.js 源代码学习笔记 ----- helpers.js

vue.js 源代码学习笔记 ----- codegenEvents.js