最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 【Vue】对于Vue官方教程的学习与理解

    正文概述 掘金(Owen)   2021-01-13   514

    介绍

    【Vue】对于Vue官方教程的学习与理解

    结合DOM树我们来说一下 Vue 框架的数据渲染(数据绑定)。

    文本节点渲染数据

    属性节点渲染数据

    DOM结构渲染数据

    交互

    实例

    数据和方法

    当一个 Vue实例被创建时,它将 data 对象中的所有参数加入到 Vue的响应系统中。当这些参数的值发生改变时,视图会产生响应。

    只有当Vue实例被创建时,就已经存在的data对象中的参数才是响应式的。

    例外:Object.freeze() 会阻止修改 data对象中参数的值

           let obj = {
                message: 'hello world'
            }
            Object.freeze(obj)
            var vm = new Vue({
                el: '#app',
                data: obj
            })
    

    【Vue】对于Vue官方教程的学习与理解

    报错翻译:无法给只读属性的 message 分配对象

    生命周期

    不要在选项方法或者回调函数上使用箭头函数,因为箭头函数并没有this,this会作为变量一直向上级词法作用域查找,直至找到为止,经常会导致报错。

            var vm = new Vue({
                el: '#app',
                data: {
                    message: 'hello world'
                },
                created: () => {
                    console.log(this.message)
                }
            })
    

    【Vue】对于Vue官方教程的学习与理解

    模版语法

    插值

    <span v-once>{{message}}</span>
    

    v-html

    你的站点上动态渲染的任意 html,可能会非常危险,因为它很容易导致 xss攻击。请只对可信任内容使用 html 插值,绝不要对用户提供的内容使用插值。

    属性

    <input v-bind:disabled="show" type="text">
    

    对于布尔属性,例如 disabled,存在就意味着禁用,但v-bind 略有不同,如果 show 值为 null、false、undefined时,disabled不起作用甚至不会渲染。

    使用 JavaScript 表达式

    模板表达式都被放在沙盒中,只能访问全局变量的一个白名单,如 Math和Date,{{Date()}},不应该在模版表达式中试图访问用户定义的全局变量。

    指令-动态参数

    <div @[handlename]="value"></div>
    

    动态参数预期会求出一个字符串,异常情况下值为 null, null值可以被显性的用于移除绑定,任何其他字符串类型的值都将会触发一个警告。

            var vm = new Vue({
                el: '#app',
                data: {
                    message: 'hello world',
                    name: "123"
                }
            })
    

    【Vue】对于Vue官方教程的学习与理解

    报错翻译:在“元素”上执行“setAttribute”失败:“123”不是一个有效的属性名称。

            var vm = new Vue({
                el: '#app',
                data: {
                    message: 'hello world',
                    name: 1
                }
            })
    

    【Vue】对于Vue官方教程的学习与理解

    报错翻译:动态指令参数无效值(预期字符串或null)

    动态参数表达式的规范:不需有空格和引号(使用没有空格和引号的表达式或者用计算属性替代这种复杂表达式)、避免使用大写字母

    修饰符

    计算属性和侦听器

    在模版内的表达式,一旦有复杂的逻辑时,都应该应用计算属性。

    计算属性具有缓存性,是基于响应式依赖进行缓存的,只在相关响应式依赖发生改变时,才会重新计算。

    计算属性对象内的方法名可以直接当做数据参数进行使用。(Vue实例会先在 data 中查找,如果没有发现,就会在计算属性里查找)

    computed:{
        now: function(){
            return Date.now()
        }
    }
    

    计算属性缓存 vs 方法

    methods:{
        now: function(){
            return Date.now()
        }
    }
    

    now 和 now() 的值是一样的,相比之下,调用方法,每当触发重新渲染时,将总会再次执行,性能上计算属性更好一些。
    getter 和 setter

    
    computed:{
        now: {
            get: function(){
                return Date.now()
            }
            set: function(newValue){ //当now值改变时执行
                console.log(value)       
            }
        }
    }
    

    侦听器

     <div id="app">
        <input type="text" v-model="message">
     </div>
    <script>
    let vm = new Vue({
      el: '#app',
      data: {
        message: 'Hello',
      },
      watch: {
        message: function (newQuestion,oldQuestion){
          console.log(newQuestion,oldQuestion)
          this.message = "new Hello"
          console.log("即将显示最新值 ↓")
          console.log(newQuestion,oldQuestion)
        }
      }
    })
    </script>
    

    Class 与 Style 绑定

    html语法参照如下:

    <style>
        .home{color: red;}
    </style>
    <div style="color:red;">hello world</div>
    

    对象语法

    <div :class="{active: isActive, item: isItem}" class="home"></div>
    

    active、item(class名)的样式是否生效,取决于 isActive、isItem 的值。 :class 和 class 属性可以同时存在。

    另一种简洁写法,可以通过 classObj 参数的值,来觉决定想要显示的样式。

    <div :class="classObj"></div>
    <script>
    data: {
        classObj: {
            active: true,
            item: null
        }
    }
    </script>
    

     我们也可以在 classObj 绑定一个返回对象的计算属性,这是一个常用且强大的模式。

    数组语法

    <div :class="[home, item]">{{message}}</div>
    <script>
    data: {
        home: '',
        item: 'classItem'
    }
    </script>
    

    数组内的元素,类似于变量,home为空,所以class样式为 classItem。

    在数组里使用对象语法

    <div :class="[home, {active: isActive}]"></div>
    

    style 对象语法

    <div :style="{color: colorValue, fontSize: sizeValue}"></div>
    <script>
        data: {
            colorValue: 'red',
            sizeValue: '80px'
        },
    </script>
    

    或者绑定样式对象

    <div :style="styleObj"></div>
    <script>
        data: {
            styleObj:{
                colorValue: 'red',
                sizeValue: '80px'
            }
        },
    </script>
    

    style 数组语法

    div :style="[colorValue, sizeValue]">hello</div>
    <script>
        data: {
            colorValue:{
                color: 'green',
                fontSize: '30px'
            },
            sizeValue: {
                lineHeight: '50px'
            }
        },
    </script>
    

    :style 数组语法,可以将多个对象数据应用到一个元素上。

    条件渲染

    <template v-if="show">
        <div>……</div>
        <div>条件渲染</div>
    </template>
    
    <div v-if="show"></div>
    <div v-else-if="show1"></div>
    <div v-else></div>
    //需要紧挨在一起使用
    

    列表渲染

    <div v-for="(item, index) in items" :key="item.id">{{item}}</div>
    <div v-for="(value, key, index) in items">{{value}}</div>
    

    数组更新的三种方式

    1、变更方法(push、pop、shift、unshift、reverse、splice、sort)

    这些数组方法竟会触发视图更新。

    2、替换数组

    vm.items = []  //重新赋值
    

    3、set 方式

    //数组 第一个参数是 具体数组对象 第二个参数是 索引 第三个参数是 变更后的值
    Vue.set(vm.items, 0, 8)
    vm.$set(vm.items, 0, 1)
    //对象
    Vue.set(vm.items, "name", "Lee")
    vm.$set(vm.items, "name", "Lee")
    

    【Vue】对于Vue官方教程的学习与理解【Vue】对于Vue官方教程的学习与理解

    对象变更的两种方式:一是重新赋值、一是set方法。

    v-for 和 计算属性

    <script>
        data: {
            list:[1,2,3,4,5,6]
        },
        computed: {
            items: function(){
                return this.list.filter(function(item){
                    return item % 2 === 0
                })
            }
        }
    </script>
    

    事件处理

    this 在方法里指向当前的 Vue实例。event是原生的DOM事件。

        methods: {
            addNewTodo: function (event) {
                console.log(this.name)
                console.log(event)
            }
        }
    //还可以用Js直接调用方法 vm.addNewTodo()
    

    事件修饰符

    按键修饰符:在监听键盘事件时,需要检查详细的按键

    <input v-on:keyup.enter="submit">
    //点击 enter键时,才会调用 submit 方法
    

    .exact  精确系统修饰符

    <button v-on:click.ctrl.exact="onCtrlClick">A</button>
    //只按住 ctrl 再点击才会执行
    

    表单输入绑定

    <input type="checkbox" v-model="check">
    //单个复选框的绑定值是布尔值
    //多个复选框绑定值是数组,数组元素为单个复选框的 value 值
    

    可以把表单的值绑定到 :value 上,可以传自定义的值

    <input type="radio" v-model="radio" :value='a'>
    <script>
        data: {
            radio:'',
            a:'yes'
        }
    //当单选框被选中时,radio的值为 yes
    </script>
    

    修饰符

    .lazy change事件,会触发数据更新(默认是 input 事件)

     <input type="text" v-model.lazy="message">
    //默认情况下输入时,message会时时更新
    //.lazy 只有当输入结束,message的值才会更新
    

    .number 可以将绑定的值转为 数值类型

    <input v-model.number="age" type="number">
    //typeof(age) 为 number
    

    .trim 可以自动过滤用户输入的首尾空白字符

    <input type="text" v-model.trim="message">
    //如果输入 '  name  ', message 的值为 'name'
    

    组件基础

    //这是一个全局组件
    Vue.component('item',{
        template:'<div>{{message}}</div>',
        data: function(){
            return {
                message: 'wenmeichao'
            }
        }
    })
    

     父子组件间的传值: 父子间通过属性向子组件传值,子组件通过 props 来接收。子组件通过 $emit ('change',参数)向父组件传值,父组件 @change="handle" 来接收。

    每个组件必须只有一个根元素。

    解析 DOM 模板时的注意事项

    1、在 table ul/li select 标签内使用组件,可能出现解析错误,用 is 解决

    <table>
        <custom-input></custom-input>
    </table>
    <script>
        Vue.component('custom-input', {
            template: '<tr><td></td></tr>'
        })
    </script>
    

    【Vue】对于Vue官方教程的学习与理解

    解决方案:

    <table>
        <tr is="custom-input"></tr>
    </table>
    

     【Vue】对于Vue官方教程的学习与理解用 is 属性,这样既符合编码规范,又能把组件渲染出来。


    起源地下载网 » 【Vue】对于Vue官方教程的学习与理解

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元