vue

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-10 22:48:46

A:vue介绍

vue:是一套渐进式前端框架
1:渐进式框架:意思就是你可以只用我的一部分,而不是用了我这一点就必须用我的所有部分。

2:框架和库的区别
a*:框架:字面上理解为架子,为用户提供一整套解决方案,必须按照他的规则来写;
b库:像函数一样,只需要调用他的方法,怎样组织由自己决定;

3:模板插值
vue使用双大括号语法来进行文本插值

<div id="app">
 {{ message }}
</div>

4:构造器
每个vue应用都是通过构造函数vue来创造vue的根实例,实例化是需要传入数据,模板,挂载元素,方法,声明周期等。

new Vue({
 // 挂载元素
 el: '#app',
 // 数据
 data: {
 message: 'Hello Vue!'
 }
});

5:数据绑定

<body>
 <div id="app">
 <!-- Hello Vue! -->
 {{ message }}
 </div>
 <script src="https://unpkg.com/vue/dist/vue.min.js"></script>
 <script>
 //将vue保存下来,方便后面改变数据
 const vm = new Vue({
 el: '#app',
 data: {
         message: 'Hello Vue!'
      }
 })
 </script>
</body>

6:声明周期
实例在创建阶段,挂载的事件监听,并实时更新

B:模板语法

1:插值

a:文本
数据绑定最常见的形式就是 (双大括号) 的文本插值:
通过使用 v-once 指令,插值后数据改变,不会更新

<p v-once>这个将不会改变: {{ msg }}</p>

b:原始HTML
{{}}会将数据解析为文本,而非html,要输出html要通过v-html

<div>{{htmlCode}}</div>
 <div v-html="htmlCode"></div>
 打印:
 '<span style="color:red">this is a test</span>
 this is a test

c:特性
如果要控制属性,可以让属性和data值进行绑定,通过v-bind指令

 <div id="app">
 <div v-bind:id="one" v-bind:class="two"></div>//缩写:class       :id
 </div>
 <script>
 const app = new Vue({
 el: '#app',
 data: {
 one: 'bcd',
 two: 'abc'
 }
 })
 </script>
 打印:
  <div v-bind:id="bcd" v-bind:class="abc"></div>

d:使用 JavaScript 表达式
这些表达式会在所属 Vue 实例的数据作用域下作为 JavaScript 被解析。有个限制就是,每个绑定都只能包含单个表达式 。

{{ number + 1 }}
{{ ok ? 'YES' : 'NO' }}
{{ message.split('').reverse().join('') }}

C:计算属性和侦听器

1:计算属性

属性
模板的初衷是用于简单运算的,在模板中放太多逻辑难以维护,所以任何复杂逻辑,都应当使用计算属性。

<div id="app">
     <p> {{Mess}}</p>
 </div>
 <script>
 const data = {
 Mess: 'Hello Vue!'
 }
 const vm = new Vue({
 el: '#app',
 data: data,
   computed: {
              Mess: function () {
                  return this.message.split('').reverse().join('');
            }
       },
 });
 </script>
</body>

方法

<div id="app">
 <p>{{ message }}</p>
 <!-- Hello Vue! -->
 <p>{{ reverseMess() }}</p>
 <!-- !euV olleH -->
 </div>
<script>
 const data = {
      message: 'Hello Vue!'
 }
 const vm = new Vue({
 el: '#app',
 data: data,
 methods: {
 reverseMess: function () {
 return this.message.split('').reverse().join('')
         }
     }
 });
 </script>

属性和方法的区别
计算属性只有在它相关依赖发生改变时才会重新求值,方法只要发生重新渲染,method调用会执行所有函数。

a:计算属性的 setter

computed: {
              fullName: {
                  // getter
                  get: function () {
                      return this.firstName + ’ ’ + this.lastName
                  },
                  // setter
                  set: function (newValue) {
                      var names = newValue.split(’ ')
                      this.firstName = names[0]
                      this.lastName = names[names.length - 1]
                  }
              }
          }

2:数据观察

提供watch来观察和响应data数据的变动

   <div id="app">
        <p @click=a++>{{a}}</p> 
    </div>

  const vm = new Vue({
            el: '#app',
            data: {
                a: 1
            },
            watch: {
                a: function(val, oldVal) {
                this.message = '新' + oldVal + '旧' + val;
            }
        }

除watch以外$watch也可以监听数据的变动,会返回一个函数,用来停止触发回调

   <div id="app">
        <p @click=a++>{{a}}</p> 
    </div>

 const vm = new Vue({
            el: '#app',
            data: {
                a: 1
            },

        });
        const w = vm.$watch('a', function (one, old) {
            console.log("新值" + one);
            console.log("旧值" + old);

            if (one === 10) {
                w();
            }
        })

D:Class 与 Style 绑定

绑定 HTML Class

对象语法

 <!-- <p :class="example">Lorem ipsum dolor sit.</p> -->
    const vm = new Vue({
            el: '#app',
            data: {
                example: {
                    abc:true,
                    bcd:true,
                    def:false,
                }
            },
        })

数组语法

    <p :style="[test1,test2]">Lorem ipsum dolor sit amet.</p>
     const vm = new Vue({
            el: '#app',
            data: {
                test: {
                    color: "skyblue",
                    fontSize: "20px"

                },
                test1: {
                    color: "green",
                },
                test2: {
                    fontSize: "18px",
                }
            },

        })

绑定内联样式

对象语法

     <div v-bind:style="test">Lorem ipsum dolor sit amet.</div>
     
     const vm = new Vue({
            el: '#app',
            data: {
                test: {
                    color: "skyblue",
                    fontSize: "20px"
                },
            },
        })

数组语法

     <div v-bind:style="[style1, style2]">Lorem ipsum dolor.</di>
     const vm = new Vue({
            el: '#app',
            data: {
                style1: {
                    color: "skyblue",
                    fontSize: "20px"

                },
                style2: {
                    color: "green",
                },
            },
        })

E:条件渲染

v-if指令

<h1 v-if="one">Vue is awesome!</h1>
<h1 v-else>Oh no </h1>

在 元素上使用 v-if 条件渲染分组

<template v-if="one">
  <h1>Title</h1>
  <p>Paragraph 1</p>
  <p>Paragraph 2</p>
</template>

v-else指令

<div v-else>
 hello
</div>

v-else-if

<div v-if="type === 'A'">
  A
</div>
<div v-else-if="type === 'B'">
  B
</div>
<div v-else-if="type === 'C'">
  C
</div>
<div v-else>
  Not A/B/C
</div>

用 key 管理元素
Vue 会尽可能高效地渲染元素,通常会复用已有元素而不是从头开始渲染。如果不要复用它们”。只需添加一个具有唯一值的 key 属性即可。

<template v-if="loginType === 'username'">
  <label>Username</label>
  <input placeholder="Enter your username" key="username-input">
</template>
<template v-else>
  <label>Email</label>
  <input placeholder="Enter your email address" key="email-input">
</template>
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!