zoukankan      html  css  js  c++  java
  • Vue 起步

    Vue 是一套构建用户界面的渐进式框架。它只关注 MVC 框架中的视图层,即 view 层,因此 Vue 也读作 view。

    构建一个 Vue 实例:

    var vm = new Vue({
        // 节点选择器
        el: "#app",
        
        // 成员属性
        data: {},
        
        // 成员方法
        methods: {
            fn: function () {},
            ...
        },
        
        // 实例被创建后执行
        created: function() {},
        
        // 实例被装载后执行
        mounted: function() {},
        
        // 计算属性
        computed: {
            computedValue: function() {},
            ...
        }
    })
    

    Vue 指令

    注:以下均用 vm 表示 Vue 的一个实例

    绑定文本

    <div>{{ msg }}</div>,其中 msg 是 vm 的成员属性

    (这种大括号包裹变量的语法,称为 Mustache语法)

    v-html 绑定HTML

    v-html='rawHTML' 将当前节点的 innerHTML 与 rawHTML 绑定

    <!--vm.rawHTML='<p>okii</p>'-->
    <div v-html="rawHTML">123</div>
    

    渲染结果:<div><p>okii</p></div>

    v-once 仅执行一次数据渲染

    <span>这个将会随时更新: {{ msg }}</span>
    <span v-once>这个仅在创建时更新: {{ msg }}</span>
    

    v-if 条件渲染

    v-if='value' 根据 value 的布尔值决定创建、销毁当前节点

    v-if v-else-if v-else 可一起搭配使用

    可以与 <template> 搭配使用,用来控制一组标签

    v-show 显示、隐藏节点

    v-show='value' 始终创建当前节点,并根据 value 的布尔值决定显示、隐藏当前节点(通过设置节点的样式 display)

    不可以与 <template> 搭配使用

    v-for 列表渲染

    v-for='(item[, index]) in myArray' 迭代数组

    v-for='(value[, key[, index]]) in myObject' 迭代对象

    in 可替换为 of

    若对迭代的次序有要求,可加入 :key='index'(或 :key='key'

    该指令所在的节点,一定是被重复创建的节点

    push() pop() shift() unshift() splice() sort() reverse() 将会触发更新

    可以与 <template> 搭配使用,用来渲染一组标签

    v-bind 绑定节点属性

    v-bind:attributeName="attributeValue" 将节点属性 attributeName 与 attributeValue 绑定

    简写 :attributeName='attributeValue'

    属性名称 attributeName 可以用方括号动态设定,如::[dynamic_attribute_name]='attributeValue'

    注:浏览器会把 attribute 名全部强制转为小写,因此动态属性名称最好不要出现大写字母

    v-on 绑定事件监听

    v-on:eventName="eventValue" 将节点属性 eventName 与 eventValue 绑定

    简写 @eventName='eventValue'

    动态绑定事件参数 @[dynamic_event_name]='eventValue'

    v-on:click="counter += 1" // counter为成员属性
    
    v-on:click="greet" // greet为成员方法
    
    v-on:click="say('hi')" // 向成员方法 say() 传入一个字符串参数 hi
    
    v-on:click="warn('Form cannot be submitted yet.', $event)" // 传入两个参数,第一个参数为字符串,第二个参数是原始 DOM 事件
    

    修饰符

    .stop .prevent .capture .self .once .passive

    <!-- 阻止单击事件继续传播 -->
    <a v-on:click.stop="doThis"></a>
    
    <!-- 提交事件不再重载页面 -->
    <form v-on:submit.prevent="onSubmit"></form>
    
    <!-- 修饰符可以串联 -->
    <a v-on:click.stop.prevent="doThat"></a>
    
    <!-- 只有修饰符 -->
    <form v-on:submit.prevent></form>
    
    <!-- 添加事件监听器时使用事件捕获模式 -->
    <!-- 即内部元素触发的事件先在此处理,然后才交由内部元素进行处理 -->
    <div v-on:click.capture="doThis">...</div>
    
    <!-- 只当在 event.target 是当前元素自身时触发处理函数 -->
    <!-- 即事件不是从内部元素触发的 -->
    <div v-on:click.self="doThat">...</div>
    
    <!-- 点击事件将只会触发一次 -->
    <a v-on:click.once="doThis"></a>
    
    <!-- 滚动事件的默认行为 (即滚动行为) 将会立即触发 -->
    <!-- 而不会等待 `onScroll` 完成  -->
    <!-- 这其中包含 `event.preventDefault()` 的情况 -->
    <div v-on:scroll.passive="onScroll">...</div>
    

    计算属性

    计算属性是个匿名函数,函数一般涉及成员属性的计算,计算属性的值即 匿名函数计算的结果。

    当被计算的成员属性更新时,计算属性也会随之更新;若成员属性没有变动,重复调用该匿名函数,不会重新计算,但返回上次计算的结果。

    var vm = new Vue({
        el: '',
        data: {},
        computed: {
            myValue: function() {
                return ... // 之后可以调用 vm.myValue
            }
        }
    })
    

    class 绑定

    写法一:绑定字符串
    :class='className',其中 vm.className 是字符串

    写法二:对象语法——对象中绑定布尔值
    :class='{ active: isActive, 'text-danger': hasError }',根据成员属性 isActive 和 hasError 的布尔值决定是否添加类名 active 和 text-danger

    写法三:对象语法——绑定对象
    :class='classObj,其中 vm.classObj={actice: true, 'text-danger': false}

    写法四:数组语法——数组中绑定字符
    :class='[activeClass, errorClass]',其中 data: {activeClass: 'active', errorClass: 'text-danger'}

    Vue 的类名绑定可以和普通类名赋值混合

    style 绑定

    写法一:绑定字符串

    写法二:对象语法——对象中绑定字符串/数值
    :style="{ color: activeColor, fontSize: fontSize + 'px' }",其中 data: {activeColor: 'red', fontSize: 30}

    写法三:对象语法——绑定对象
    :style="styleObject",其中data: {styleObject: {color: 'red', fontSize: '13px'}}

    写法四:数组语法——数组中绑定样式对象
    数组元素为样式对象

    Vue 的样式绑定可以和普通样式赋值混合

    组件

    Vue.component('my-component', {
        props: [prop1, ...],
        data: function() {
            return {
                value1: 0,
                ...
            }
        },
        // template 中仅允许有一个根节点
        template: `
        <div>
            <h3>{{ value1 }}
            <p>{{ prop1 }}</p>
        </div>`
    })
    

    监听事件

    父组件声明子组件的自定义事件,子组件中通过 $emit() 调用:

    <div id='app'>
        <div :style='{fontSize: fontSize + "em"}'>
            <!--向系统注册(声明)一个名为 enlarge-text 的自定义事件-->
            <my-post v-on:enlarge-text='fontSize += 0.1' />
        </div>
    </div>
    
    Vue.component('my-post', {
        template:`
            <div>
                <h3>title</h3>
                <button v-on:click='$emit("enlarge-text")'>放大文本</button>
            </div>
        `
    })
    // $emit('enlarge-text') 即调用自定义事件 enlarge-text
    
    new Vue({
        el: '#app',
        data: {
            fontSize: 1
        }
    })
    

    子组件通过 $emit(eventName, param) 抛出参数 param,供父级组件使用:

    <div id='app'>
        <div :style='{fontSize: fontSize + "em"}'>
            <!--向系统注册一个名为 lessen-text 的自定义事件,$event 即子组件传入的参数-->
            <my-post v-on:lessen-text='fontSize += $event' />
            <!--向系统注册一个名为 lessen-text 的自定义事件,调用 vm.appMethod()-->
            <my-post v-on:lessen-text='appMethod' />
        </div>
    </div>
    
    Vue.component('my-post', {
        // $emit("lessen-text", 0.3) 即调用父组件注册事件 lessen-text,并抛出参数 0.3
        template:`
        <div>
            <h3>title</h3>
            <button v-on:click='$emit("lessen-text", 0.3)'>缩小文本</button>
        </div>
        `
    })
    
    new Vue({
        el: '#app',
        data: {
            fontSize: 2
        },
        methods: {
            appMethod: function(lessenAmount) { // lessenAmount 即子组件通过 $emit('lessen-text', 0.3) 传过来的第二个参数:0.3
                this.fontSize -= lessenAmount
            }
        }
    })
    

    事件监听步骤总结

    1. 在父组件中引入子组件时,通过 v-on:eventName='...' 声明子组件可以使用的事件 eventName
    2. 在子组件相应的位置激活 1 中声明的事件 eventName。事件具体执行的内容为 1 中的 ...

    子组件向父组件传递参数,是通过 $emit(eventName, param)。父组件通过 $event 内联调用,或在 vm.methods() 中作为方法的参数

    动态组件

    通过 component 标签加上 is 属性,动态切换组件

    <!-- 组件会在 `currentTabComponent` 改变时改变 -->
    <component v-bind:is="currentTabComponent"></component>
    
  • 相关阅读:
    Trying to reload asset from disk that is not stored on disk
    学习,再学习!
    关于webQQ3.0
    java 之 枚举
    部队的日子
    大兵
    关于webQQ3
    Ubuntu下gedit的java编译设置
    晒晒
    chrome中行网银插件(Linux下可用,可以淘宝支付宝)
  • 原文地址:https://www.cnblogs.com/gu13/p/vue-start.html
Copyright © 2011-2022 走看看