VUE之实例成员

一:基础简介

(1)前段框架简介

(1)angular:

  (1)由Facebook开发 适用于大型项目

(2)react:

  (1)由GitHub公司开发

(3)Vue:

  (1)由中国人尤雨溪开发 吸取了angular与react的优点

(2)Vue框架的优点

(1)轻量级:该框架大小比较小

(2)中文API:由于是中国人开发 操作文档全是中文 对中国人比较友好

(3)数据驱动:DOM元素让DOM文档随着数据的变化而变化

(4)双向绑定:数据层与视图层的同步 当写入数据的时候 视图层跟着发生变化

(5)MVVM的设计模式:将前段与后端分离出来

(6)组件化开发:HTML + CSS + JS协同开发

(7)单页面的应用:为手机节约内存等

(3)渐进式框架:

(1)其可以控制一个标签 一个页面 甚至一个项目

(4)Vue的导入方式

<script src="statict/vue.js"></script>  // 本地直接导入
<script src="https://cn.vuejs.org/js/vue.min.js"></script>  // cdn 导入

二:实例成员 --- 挂载点

(1)作用:

  (1)与HTML页面进行关联

  (2)html与body不能作为挂载点

  (3)一个vue挂载点之匹配一个结果 因此一般VUE挂载点都使用id

<body>
<div id="wrap">
    {{ }}
    <hr>
    <div class="main">

    </div>
    <hr>
    <div class="main">
        {{ }}
    </div>
</div>
</body>
<script>
<!--    生成一个vue对象-->
    new Vue({
        // el: '.main'  // 与main进行挂载 最下面的main不会被挂载
        el:'#wrap'    // 与wrap进行挂载 所有的被挂载点都会消失
    })

</script>
挂载点示例

(2)JS对象(字典)小特性

<script>
    let age = 18;
    let user_info = {
        user:'SR',   // 当字典内部的key都是字符串的时候 key中引号可以省略不写
        age         // 当key中的值为变量的时候 且值与key同名 则值可以不写  age:age
    };
    // age: 18
    // user: "SR"
    console.log(user_info)
</script>

 三:实例成员 --- 数据

(1)在vue实例中通过data添加数据

<div id="app">
    <!--插值式获取值-->
    <p>{{age}}</p>
    <p>{{name}}</p>
    <p>{{address}}</p>
</div>

</body>
<script>
    new Vue({
        el:'#app',
        data:{  // 通过data为挂载点添加数据
            age:18,
            name:'SR',
            address:'China',
        }
    })
</script>
数据实例

(2)通过插值式获取值

    <!--插值式获取值-->
    <p>{{age}}</p>
    <p>{{name}}</p>
    <p>{{address}}</p>

(3)变量接收vue生成的对象 通过变量名访问内部属性(内部属性都是以$开头)

<script>
    let app = new Vue({  // 变量接收 实例化产生的对象
        el:'#app',
        data:{  // 通过data为挂载点添加数据
            age:18,
            name:'SR',
            address:'China',
        }
    })
</script>
<script>
    console.log(app);  // 获取一个对象 内部对应的方法属性
    console.log(app.$data.name);  // SR
    console.log(app.$data.age)   // 18
</script>
通过变量获取数据一

(4)直接通过变量名访问内部的属性

<script>
    console.log(app);  // 获取一个对象 内部对应的方法属性
    console.log(app.name);  // SR
    console.log(app.age)   // 18
</script>

四:实例成员 --- 过滤器

(1)作用:过滤器本身就是用来处理函数的 其可以将插值式中的数据作为参数传给函数进行处理 得到的函数返回结果就是函数处理后的结果

(2)使用方式:

{{ ...变量 | 过滤器(...变量) }}

(3)过滤器在实例中由filters提供

<div id="app">
    <!--    插值表达式中 可以做些简单的运算-->
    <p>{{num + 100}}</p>
    <!--    字符串方法属性-->
    <p>{{msg.split('')[0]}}</p>
    <!--    调用过滤器f1-->
    <p>{{num|f1}}</p>
    <!--    该函数传多个参数-->
    <p>{{ 10, 20, 30, 40 | f2 }}</p>

    <!--    给函数括号内传递两个产生-->
    <p>{{ 10, 20 | f2(50, 80) }}</p>
    <!--    传递参数不够 返回Nan-->
    <p>{{ 120 | f2 }}</p>
<!--    函数内部传参过多 网页报错-->
    <p>{{ 10, 20, 30, 40,60 | f2 }}</p>
</div>
</body>
<script>
    let app = new Vue({
        el: '#app',
        data: {
            num: 100,
            msg: '消息提示框'
        },
        filters: {
            f1: function (num) {
                return num * 2
            },
            f2: function (a, b, c, d) {
                return a + b + c + d
            }
        }

    })
</script>
过滤器

 五:实例成员 --- 文本指令

(1)使用方式:

v-text   渲染普通文本
v-html 渲染html页面

(2)文本指令 可以渲染常量 可以渲染变量

<div id="app">
    <p>{{name}}</p>

<!--    渲染变量-->
    <p v-text="name">{{name}}</p>
<!--    渲染常量-->
    <p v-text = '123'></p>
    <p v-text = 'true'></p>
<!--    有特殊符号的加上特殊符号即可-->
    <p v-text = '"hello world"'></p>
    <p v-text = '"李木子 " + name' ></p>
    <p v-text = "[1,2,3,4]"></p>
<!--    加上html-->
    <p v-html><b>hello world</b></p>
</div>
</body>
<script>
    let app = new Vue({
        el: '#app',
        data: {
            name: 'SR',
            age: 18
        }
    })
</script>
文本渲染

(3)反引号特点:

  (1)反引号可以写多行

  (2)反引号可以填充变量

<script>
    let s1 = `第一行
第二行
结束行`;
console.log(s1);

let name = 'SR';
let age = 18;
let s2 = `
name: ${name}
age: ${age}
`;
console.log(s2);
</script>

六:实例成员 --- 事件指令

(1)语法:

v-on:事件名="函数名(参数们)

(2)简写

@事件名="函数名(参数们)

(3)使用方式

用methods实例成员提供 事件函数 的实现
    <style>
        body {
            /*页面文本不允许选择*/
            user-select: none;
        }

        .low-num {
            cursor: pointer;
        }

        .low-num:hover {
            color: red;
        }
    </style>
</head>
<body>
<div id="app">
    <!-- 事件指令:v-on:事件名="事件函数名"   -->
    <p class="low-num" v-on:click="lowNum">
        <span>点击减一:</span>
        <span>{{ num }}</span>
    </p>

    <p v-on:dblclick="dblAction">双击</p>

    <!-- v-on:事件名="事件函数" 可以简写为 @事件名="事件函数"  -->
    
<!--    不传参-->
    <p @mouseover="overAction()">悬浮</p>
<!--    传递一个自定义参数-->
    <p @mouseover="overAction(10)">悬浮1</p>
<!--    传递两个自定义参数-->
    <p @mouseover="overAction(10, 20)">悬浮2</p>
<!--    两个自定义参数 一个事件对象-->
    <p @mouseover="overAction(10, 20, $event)">悬浮3</p>

</div>
</body>
<script>


    let app = new Vue({
        el: '#app',
        data: {
            num: 100
        },
        methods: {
            lowNum: function () {
                this.num -= 1  // 每次点击 num变量减一
            },
            dblAction(ev) {
                console.log(ev)  // 事件对象
            },
            overAction(a, b, c) {
                console.log(a, b, c)
            }
        }
    })


</script>
点击事件

PS:

(1)@事件="方法" --- > 传递事件参数

(2)@事件 = "方法()" --- > 不传递任何参数

(3)@事件 = "方法(参数)" ---> 自定义参数

(4)@事件 = "方法(参数,$event)" --- > 自定义参数 + 事件对象

七:实例成员 ---  属性指令

(1)语法:

v-bind:属性名="变量" 

(2)简写

:属性名="变量" 

(3)单值属性绑定

<div id="app">
    <p class="p1" id="p1" index="">属性变量1</p>
<!--   单属性 调用变量p1-->
    <p v-bind:class="p1"  index="">属性变量2</p>
<!--    简写方式 :属性名='变量'-->
    <p :class="p1"  index="">自定义属性 + 变量名简写/p>
</div>
</body>
<script>
    let app = new Vue({
        el:'#app',
        data:{
            p1:'q1',
        }
    })
</script>
单值属性绑定

(4)style多值属性绑定

<div id="app">
    <!--    其调用myStyle这个变量 myStyle调用对应的值-->
    <p :style="myStyle">style样式属性一</p>
    <!--    前面的key对应的值 值从变量中获取-->
    <p :style="{backgroundColor: c1, color: c2,textAlign:c3}">style样式属性二</p>
</div>
</body>
<script>
    let app = new Vue({
        el: '#app',
        data: {
            p1: 'q1',
            myStyle: {
                backgroundColor: 'red',
                textAlign: 'center'

            },
            c1: 'yellow',
            c2: 'red',
            c3: 'center'
        },

    })
</script>
style属性的绑定

(5)class多值属性绑定

    <style>


        .c1 {
            background-color: antiquewhite;
        }

        .c2 {
            font-size: 100px;
        }

        .c3 {
            text-align: center;
        }
    </style>
</head>
<body>
<div id="app">
 <p :class="myc1">class单属性</p>
<!--    调用变量myc1 myc2 myc3 所对应的值 其值调用上述css-->
 <p :class="[myc1,myc2,myc3]">class多属性</p>
</div>
</body>
<script>
    let app = new Vue({
        el: '#app',
        data:{
            myc1:'c1',
            myc2:'c2',
            myc3:'c3',
        }

    })
</script>
class多值绑定

(6)class属性绑定布尔值

  <style>


        .ttt {
            background-color: gold;
            color: orange;
        }
    </style>
</head>
<body>
<div id="app">
       <!--xxx是类名,是否起作用有布尔类型变量yyy值决定 -->
    <p :class="{xxx:yyy}">样式绑定</p>

    <!--案例:点击切换类名是否起作用-->
<!--    此时ttt所对应的布尔值为真 被调用-->
    <p @click="clickAction" :class="{ttt:yyy}">点击切换样式 </p>
</div>
</body>
<script>
    let app = new Vue({
        el: '#app',
        data:{
            yyy:true
        },
        methods:{
            clickAction(){
                this.yyy = !this.yyy;
            }
        }

    })

</script>
绑定布尔值
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        .box {
             200px;
            height: 200px;
            background-color: orange;
        }
        .center {
            text-align: center;
            line-height: 200px;
        }
        .rcenter {
            text-align: right;
            line-height: 200px;
        }
        .right {
            text-align: right;
        }
        .top {
            line-height: 21px;
        }
        .bottom {
            line-height: calc(400px - 21px);
        }
    </style>
</head>
<body>
    <div id="app">
        <div class="box" :class="[c1, {right:r, top:t, bottom:b}]" @mouseover="a1" @mousedown="a2" @mouseup="a3" @mouseout="a4">{{ msg }}</div>
    </div>
</body>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el: '#app',
        methods: {
            a1(){
                this.msg = '被悬浮';
                // 正中
                this.c1 = 'center';
                this.r = 0;
                this.t = 0;
                this.b = 0;
            },
            a2(){
                this.msg = '被按下';
                // 右上
                this.r = 1;
                this.t = 1;
                this.b = 0;
            },
            a3(){
                this.msg = '被抬起';
                // 右中
                this.c1 = 'rcenter';
                this.r = 0;
                this.t = 0;
                this.b = 0;
            },
            a4(){
                this.msg = '被移开';
                // 右下
                this.r = 1;
                this.t = 0;
                this.b = 1;
            },
        },
        data: {
            msg: '',
            c1: '',
            r:0,
            t:0,
            b:0,
        }
    })
</script>
</html>
动态修改文本样式案例

八:实例成员 ---  form提交表单

(1)基础语法:

v-model="控制vaule值的变量"

(2):value="变量" 直接绑定数据不会时时更新(修改表单标签值,值不会时时映射给绑定的变量)

   <style>
           .p1 {
             500px;
            height: 21px;
            background-color: orange;
        }
    </style>
</head>
<body>

<div id="app">
    <form>
<!--        此时不会有数据同步-->
        <p>输入值:<input type="text" :value="num"></p>
        <p>输入值:<input type="text" :value="num"></p>
        <p class="p1">{{ num }}</p>
        <hr>
<!--        此时数据会同步 input框内输入什么 下面变量对应什么-->
         <p>输入值:<input type="text" v-model="num"></p>
         <p>输入值:<input type="text" v-model="num"></p>

        <p class="p1">{{ num }}</p>
    </form>
</div>
</body>
<script>
    let app = new Vue({
        el: '#app',
        data: {
            num: '123'
        }
    })
</script>
数据同步

(3)v-model操作单独复选框

      <p class="p1">{{ num }}</p>
        <hr>
        提交:<input type="checkbox" name="agree" v-model="isAgree">
        <p>{{isAgree}}</p>  // 如果同意下发的isAgree会变成true
        <p><input type="submit"></p>
    </form>
</div>
</body>
<script>
    let app = new Vue({
        el: '#app',
        data: {
            num: '123',
            isAgree: 0
        }
    })
</script>
提交框

(4)单选框

    性别:
        男 :<input type="radio" name="sex" value="male" v-model="mysex">
        女 :<input type="radio" name="sex" value="female" v-model="mysex">
        其它: <input type="radio" name="sex" value="others" v-model="mysex">
        <p>{{ mysex }}</p>
        
    </form>
</div>
</body>
<script>
    let app = new Vue({
        el: '#app',
        data: {
            num: '123',
            isAgree: 0,
            mysex: 'others',  //默认单选
        }
    })
单选框

(5)多选框

   兴趣爱好:
        乒乓球: <input type="checkbox" name="hobbies" value="pingpang" v-model="myhobbies">
        羽毛球:<input type="checkbox" name="hobbies" value="basketball" v-model="myhobbies">
        排球 :<input type="checkbox" name="hobbies" value="voliball" v-model="myhobbies">
        <p>{{ myhobbies }}</p>


    </form>
</div>
</body>
<script>
    let app = new Vue({
        el: '#app',
        data: {

            myhobbies:['basketball','voliball']  // 多选
        }
    })
多选框
原文地址:https://www.cnblogs.com/SR-Program/p/11637484.html