zoukankan      html  css  js  c++  java
  • vue框架:框架简介,基础实例成员,基础指令,js对象方法补充

    1.指令

    2.实例成员

    3.组件

    4.项目开发

    1)定义:JavaScript渐进式框架

    ​ 渐进式:可以控制一个页面的一个标签,也可以控制一系列的标签,也可以控制整个页面,甚至可以控制整个前台项目

    2)优势:

    ​ 有指令(分支结构,循环结构...) 复用页面结构等

    ​ 有实例成员(过滤器,监听), 可以对渲染的数据进行二次格式化

    ​ 有组件(模板的复用或组合),快速搭建页面

    ​ 虚拟dom:所有文件加载到内存中

    ​ 数据的双向绑定

    ​ 单页面应用

    ​ 数据驱动

    3)为什么学习vue:

    ​ 前台框架:Angular 庞大(facebook),React 移动端(gethub),vue 吸取前两者的优势,轻量级

    ​ vue文档是中文

    ​ 实现前后台分离开发,节约开发成本

    ps:前后端分离与前后端不分离的区别

    前后端分离:

    ​ 后端只需要返回前端需要的数据即可,不再控制前端显示的效果,耦合度相对较低

    ​ 优点:开发效率高,用户体验好 缺点:成本高,不利于SEO优化

    前后端不分离:

    ​ 前端页面看到的效果都是由后端控制的,由后端渲染页面或者重定向到其他页面,也就是后端需要控制前端的显示,这会导致前后端的耦合度很高

    ​ 优点:节省资源,利于SEO优化 缺点:不利于维护,用户体验差

    4)如何使用vue

    ​ 简单使用

    vue环境导入
    <!--    cdn导入-->
        <script src="https://cn.vuejs.org/js/vue.js"></script>
    <!--    本地导入-->
        <script src="js/vue.js"></script>
    
    挂载点:

    ​ el:挂载点

    ​ 1)一个挂载点只能控制一个页面结构(优先匹配到的结构)

    ​ 2)挂载点挂在的页面标签严格简易用id属性进行匹配(一般习惯用app)

    ​ 3)html标签与body标签不能作为挂载点

    ​ 4)是否接收vue对象,是外界是否要有vue对象决定的app里面的东西,用app.$data.num

     <div id="app">
            <div class="d1">
                abc
                {{num}}
            </div>
            <div class="d1">
                bbc
                {{num}}
            </div>
    </div>
        <div id="main">
            {{n}}
        </div>
    
         
    <script src="js/vue.js"></script>
    <script>
         var app = new Vue({
            el:'#app',
            data:{
                num:100
            }
        });
        new Vue({
           el: '#main' ,
            data: {
               n: app.num
            }
        });
        console.log('12345');
        console.log(app.$data.num)
    </script>
    
    插值表达式:

    ​ 1)空插值表达式:{{ }}

    ​ 2)插值表达式中渲染的变量在data中可以初始化

    ​ 3)插值表达式可以进行简单的运算和简单逻辑

    ​ 4)插值表达式符号冲突解决,用delimiters自定义解决

    <div id='app'>
    	<p>
            {{}}
        </p>
        <p>
            {{num+10}}
        </p>
        <p>
            {{msg + num}}
        </p>
        <p>
            [{ num }]
        </p>
    </div>
    <script>
    	new Vue({
            el:'#app',
            data:{
                num:10,
                msg:'message',
            },
            delimiters:['[{','}]'],
        })
    </script>
    
    过滤器filters:

    ​ 1)用实例成员filters来定义过滤器

    ​ 2)在页面结构中,用 | 来表示使用过滤器

    ​ 3)过滤方法的返回值就是过滤器过滤后的结果

    ​ 4)过滤器可以对1-n个对象进行过滤,同时还可以传入辅助的变量,过滤器方法接收参数是按照传入的位置先后

    <body>
        <div>
            <!-- 简单使用:过滤的对象会作为参数传给过滤器 -->
            <p>
                {{ num | add(20) }}
            </p>
            <!-- 串联使用:将第一个过滤器结果作为参数传给第二个参数-->
            <p>
                {{ num | add(100) | jump(2) }}
            </p>
            <!-- 终极使用 -->
            <p>
                {{ n1,n2 | fn(99,77) }}
            </p>
            <!-- 最终使用-->
            <p>
                {{ n1,n2 | fn(99,77),n1,n2 | fn(100) }}
            </p>
        </div>
    </body>
    <script>
    	new Vue({
            el:'#app',
            data:{
                num:10,
                n1:66,
                n2:88
            },
            filters:{
                add:function (a,b){
                    return a+b
                },
                jump:function(a,b){
                    return a*b
                },
                fn: function(a,b,c,d){
                    return a+b+c+d
                }
            }
            
        })
    </script>
    
    文本指令:

    ​ 1)v-* 是vue指令,会被vue解析,v-text="num"中的num是变量(指令是有限的)

    ​ 2)v-text是原样输出渲染内容,渲染控制的标签自身的内容会被替换掉

    <p v-text="num">123</p>			123会被num替换掉
    

    ​ 3)v-html可以解析渲染html语法的内容

    ​ js中的基本数据类型:字符串,数字,布尔,undefined

    这些类型可以直接展示

    <body>
        <div id="app">
            <p>{{ num | add(300) }}</p>
    
            <p v-text="num"></p>
            <p v-text="num">123</p>
    
            <p v-text="info"></p>
            <p v-html="info"></p>
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                num: 100,
                info: '<i style="color: red">info内容</i>'
            },
            filters: {
                add: function (a, b) {
                    return a + b;
                }
            }
        })
    </script>
    
    js对象补充:

    var dic_obj = {

    ​ 属性: 值(数值,函数)

    }

    1. js没有字典类型,只有对象类型,对象可以完全替代字典来使用

    2. js中对象的属性名,都采用字符串类型,所以就可以省略字符串的引号标识

    3)对象中属性值为函数时,称之为对象的方法,方法建议简写:

    方法名(){

    4) 如果对象的属性值是一个变量,且变量名与属性名相同,还可以简写{属性,}

    var height = 180;
    var p = {
        height,
        name: 'Jerry',
        eat(){
    	}
    };
    console.log(p.name,p.height)
    

    5) js中声明类的方法

    ​ 第一种:

    class People{
        constructor(name){
            this.name = name
        }
        eat(){
            console.log(this.name+ '在吃饭')
    	}
    }
    let p1 =  new People('Bob');
    let p2 = new People('Tom');
    console.log(p1.name, p2.name);
    p1.eat();
    

    ​ 第二种:在函数内部出现了this语法,该函数就是类,否则就是普通函数

    function Teacher(name){
        this.name = name;
        this.eat = function(){
            console.log(this.name + '在吃饭')
        }
    }
    let t1 = new Teacher('Myself');
    t1.eat();
    

    6)类属性:
    给类属性赋值,所有的对象都能访问

    function Fn(){}
    let f1 = new Fn();
    let f2 = new Fn();
    
    赋值类的属性
    Fn.prototype.num = 100;
    console.log(f1.num);
    console.log(f2.num);
    
    类似于单例
    Vue.prototype.num = 1000;
    let v1 = new Vue();
    let v2 = new Vue();
    console.log(v1.num);
    console.log(v2.num)
    
    js的函数补充

    ​ 1)函数的形参与调用时传入的实参关系(你传你的,我接收我的)

    ​ 传入和接收的参数个数不需要一致

    ​ 但是一定按位进行赋值(没有关键字参数)

    ​ 没有接收的实参会被遗弃,没有被赋值的形参为undefined

    ​ 2)函数定义的演变

    类似匿名函数
    let fn2 = function (a,b){
        return a+b;
    }
    
    省略关键字的箭头函数
    let fn3 =(a,b) =>{
        return a+b;
    }
    
    没有函数体,只有返回值的函数,可以省略作用域{},由于只要返回值,所以return 也可以省略
    let fn4 = (a,b) => a+b;
    
    没有参数时
    let fn4 = ( ) => a+b;
    
    如果形参只有一个时,声明参数的()也可以省略
    let fn5 = num => num*num
    
    弱语言
    console.log(10 + '5') 	'105'
    console.log(10 - '5')	5
    先优先进行字符串运算,不行再数值运算
    console.log(+'55555')	55555
    
    数据驱动:

    ​ 对比dom驱动:1.js选择器获取目标 2.为目标标签绑定事件 3.在事件中完成相应逻辑

    ​ 1)操作是一个功能,使用需要一个方法来控制

    ​ 2)方法名是变量,所以控制变量就可以控制该方法

    事件指令:

    ​ 1) 在实例成员methods中声明事件方法

    ​ 2)标签通过事件指令绑定声明的方法:v-on: 事件名=“事件方法名”

     eg: <button v-on:click="btnClick">按钮</button>
    

    ​ 3) 标签通过事件指令绑定声明的方法,且自定义传参:v-on:事件名=“事件方法名()”

     eg: <button v-on:click="btnClick()">按钮</button>
    

    不传任何参数:

    eg: <button v-on:click="btnClick($event)">按钮</button>  传入事件对象,同不写()
    

    案列:

    <body>
        <div id="app">
            <button v-on:click="btnClick">{{ btn1 }}</button>
    
            <button v-on:click="btnClick">{{ btn2 }}</button>
            <hr>
    
            <!-- 直接绑定事件名:系统会在触发事件时(点击时)调用事件方法(fn1),传给事件方法一个参数(事件对象) -->
            <button v-on:click="fn1">按钮3</button>
    
            <!-- 绑定的事件名后跟着(),不是主动调用事件方法,而是表示在触发事件调用时,传入的参数全由用户自己决定 -->
            <button v-on:click="fn2($event, 10, 20)">按钮4</button>
    
            <hr>
            <button v-on:click="fn(btn1)">{{ btn1 }}</button>
    
            <button v-on:click="fn(btn2)">{{ btn2 }}</button>
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        // 对比DOM驱动:1)js选择器获取目标标签 2)为目标标签绑定事件 3)在事件中完成相应逻辑
        // var btn = document.getElementsByTagName('button')[0];
        // btn.onclick = function () {
        //     console.log(111111111111);
        // };
        new Vue({
            el: '#app',
            data: {
                btn1: '按钮1',
                btn2: '按钮2',
            },
            methods: {
                btnClick () {
                    console.log(666)
                },
                fn1 (ev) {
                   console.log(ev.clientX, ev.clientY);
                },
                fn2(ev, n1, n2) {
                    console.log(ev, n1, n2);
                    console.log(ev.clientX, ev.clientY);
                },
                fn (msg) {
                    console.log(msg);
                }
            }
        })
    </script>
    
  • 相关阅读:
    liferay常用api总结
    liferay增删改简单小练习
    MD5加密
    日期的工具类
    java生成随机六位数的验证码&随机生成十位数ValidCode码,用于邮件的验证&检查是不是符合为合法的中国的手机号码
    MyBaties
    网页的外观---CSS层叠样式表---03
    还在买鲜花送女神?手把手教你搭建3D立体相册网站,包女神稀饭
    Vue入门——常见指令及其详细代码示例
    什么是可串行化MVCC
  • 原文地址:https://www.cnblogs.com/godlover/p/12297282.html
Copyright © 2011-2022 走看看