vue 简介 vue 项目 组件

1. 概念

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。能够为复杂的单页应用提供驱动。

2. 用法

2.1 声明式渲染

2.1.1 改变文本     {{ message }}        打开你的浏览器的 JavaScript 控制台 (就在这个页面打开),并修改 app.message 的值,你将看到上例相应地更新。

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>

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


  <script src="vue.js"></script>
  <script>

    var app = new Vue({
      el: '#app',
      data: {
        message: 'Hello Vue!'
      }
    })
    
  </script>
</body>

</html>
View Code

扩展:

模板渲染方式:

生成的dom 替换了容器内容       #app  又称为挂载点

<div id="app"></div>
el:'#app',
template:'<h1>hello {{mes}}</h1>',
data:{
mes:'world'
}

 同名数据访问优先级:data -  methods - computed

2.1.2 绑定元素特性(属性)  v-bind:title="message"

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>

  <div id="app-2">
    <span v-bind:title="message">
      鼠标悬停几秒钟查看此处动态绑定的提示信息!
    </span>
  </div>

  <script src="vue.js"></script>
  <script>
    var app2 = new Vue({
      el: '#app-2',
      data: {
        message: '页面加载于 ' + new Date().toLocaleString()
      }
    })
  </script>
</body>

</html>
View Code

2.2  条件与循环

2.2.1 条件       v-if="seen"        Vue 也提供一个强大的过渡效果系统,可以在 Vue 插入/更新/移除元素时自动应用过渡效果

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>

  <div id="app-3">
    <p v-if="seen">现在你看到我了</p>
  </div>

  <script src="vue.js"></script>
  <script>
    var app3 = new Vue({
      el: '#app-3',
      data: {
        seen: true
      }
    })
  </script>
</body>

</html>
View Code

2.2.2 循环      v-for="todo in todos"     {{ todo.text }}

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>

  <div id="app-4">
    <ol>
      <li v-for="todo in todos">
        {{ todo.text }}
      </li>
    </ol>
  </div>

  <script src="vue.js"></script>
  <script>
    var app4 = new Vue({
      el: '#app-4',
      data: {
        todos: [{
            text: '学习 JavaScript'
          },
          {
            text: '学习 Vue'
          },
          {
            text: '整个牛项目'
          }
        ]
      }
    })
  </script>
</body>

</html>
View Code

2.3 处理用户输入

2.3.1 处理组件内部数据      v-on:click="reverseMessage"

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>

  <div id="app-5">
    <p>{{ message }}</p>
    <button v-on:click="reverseMessage">逆转消息</button>
  </div>

  <script src="vue.js"></script>
  <script>
    var app5 = new Vue({
      el: '#app-5',
      data: {
        message: 'Hello Vue.js!'
      },
      methods: {
        reverseMessage: function () {
          this.message = this.message.split('').reverse().join('')
        }
      }
    })
  </script>
</body>

</html>
View Code

2.3.2 双向绑定      v-model="message"

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>

  <div id="app-6">
    <p>{{ message }}</p>
    <input v-model="message">
  </div>

  <script src="vue.js"></script>
  <script>
    var app6 = new Vue({
      el: '#app-6',
      data: {
        message: 'Hello Vue!'
      }
    })
  </script>
</body>

</html>
View Code

扩展:

input 的自定义双向绑定: :value    @input="fn"  (等价于 v-model :语法糖,定义动态数据,然后监听数据变化,fn 实现 当前 target.value = this.value)

2.4 组件

2.4.1 静态数据      Vue.component('todo-item', {      template: '<li>这是个待办项</li>'    })            <todo-item></todo-item>

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>
  <div id="app-7">
    <ol>
      <todo-item></todo-item>
    </ol>

  </div>

  <script src="vue.js"></script>
  <script>
    Vue.component('todo-item', {
      template: '<li>这是个待办项</li>'
    })
    var app7 = new Vue({
      el: '#app-7'
    })
  </script>
</body>

</html>
View Code

2.4.2  动态数据   从父作用域将数据传到子组件    prop   

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>
  <div id="app-7">
    <ol>
      <!--
            现在我们为每个 todo-item 提供 todo 对象
            todo 对象是变量,即其内容可以是动态的。
            我们也需要为每个组件提供一个“key”,稍后再
            作详细解释。
          -->
      <todo-item v-for="item in groceryList" v-bind:todo="item" v-bind:key="item.id"></todo-item>
    </ol>
  </div>

  <script src="vue.js"></script>
  <script>

    
    Vue.component('todo-item', {
      props: ['todo'],
      template: '<li>{{ todo.text }}</li>'
    })

    var app7 = new Vue({
      el: '#app-7',
      data: {
        groceryList: [{
            id: 0,
            text: '蔬菜'
          },
          {
            id: 1,
            text: '奶酪'
          },
          {
            id: 2,
            text: '随便其它什么人吃的东西'
          }
        ]
      }
    })


  </script>
</body>

</html>
View Code

more1:

props 可配置校验规则:

props:{

  name:{ type:String,require:true,default:'your name' },

  age:{ type:Number,validator(val){ return val > 0 } }

}

more2:

复杂数据:打包处理

父组件数据结构:mes:{name:'ww',age:'11'} , 子组件传递属性使用  v-bind = "mes"  替代 :name="mes.name" ...

2.4.2.1 实际应用 组件呈现形态

<div id="app">
  <app-nav></app-nav>
  <app-view>
    <app-sidebar></app-sidebar>
    <app-content></app-content>
  </app-view>
</div>
View Code

2.5  数组的变异方法:  动态改变 arr 数据 (不能通过改变长度及末尾添加赋值等操作来改变数组)

pop、push、shift、unshift、splice、sort、reverse (vue 内部重写了数组的这几个方法,执行时会添加渲染执行函数)

对象的改变方式:vm.$set  ( vm.$set(obj,name,val) )

2.6 扩展:

vue dom的渲染是异步的,渲染完成函数 vm.$nextTick()   

ref = 'idName'  -  this.$refs['idName']   ( ele )       vue 实例 

3. 相关文章

Vue.js

MVVM

mvvm  廖雪峰

vue 项目代码

原文地址:https://www.cnblogs.com/justSmile2/p/10833017.html