zoukankan      html  css  js  c++  java
  • 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 项目代码

  • 相关阅读:
    51Nod一级算法1002数塔取数问题
    素数筛法
    辗转相除法求最大公约数
    模型评估与选择
    Linux下的五种IO模型
    浮点类型丢失精度的问题
    Update操作浅析,一定是先Delete再Insert吗?
    SQLSERVER中返回修改后的数据
    MachineKey生成
    Katana的起源
  • 原文地址:https://www.cnblogs.com/justSmile2/p/10833017.html
Copyright © 2011-2022 走看看