腾讯老衲衲 發表於 2019-11-12 13:45:00

前端开发Vue框架--(一)

<p><strong>Vue框架:</strong>官网</p>
<pre><code>vue框架:渐进式JavaScript框架
        vue一个环境:可以只控制页面中一个标签、或者控制一组标签、再或者控制整个页面、也可以直接控制整个项目
        vue可以根据实际需求,选择控制前端项目的区域范围
</code></pre>
<p><strong>为什么要学习vue</strong></p>
<pre><code class="language-python">'''
1. html、css、js直接开发项目,项目杂乱,不方便管理,要采用前端框架进行开发,规范项目
2. Angular、React、Vue三个前端框架,Vue框架吸取前两个框架所有优点,摒弃缺点,且一手文档是中文
3. Vue框架优点:
        轻量级
        数据驱动
        数据的双向绑定
        虚拟DOM(嵌套页面架构的缓存)
        组件化开发
        由全球社区维护
       
        单页面应用、MVVM设计模式(前面我们还学过 MVC模式、MTV模式)
'''
</code></pre>
<p><strong>Vue导读</strong></p>
<pre><code class="language-tex">1.Vue框架
        vue是可以独立完成前后端分离式web项目的js框架
        三大主流框架之一:Angular、React、Vue
        vue:结合其他框架优点、轻量级、中文API、数据驱动、双向绑定、MVVM设计模式、组件化开发、单页面应用
        Vue环境:本地导入或cdn导入
2.Vue是渐进式js框架
        通过对框架的了解与运用程度,来决定其在整个项目中的应用范围,最终可以独立以框架方式完成整个web前端项目
</code></pre>
<p><strong>如何使用Vue</strong></p>
<p>​        官网下载后导入</p>
<pre><code class="language-html">&lt;div id="app"&gt;
    {{ }}
&lt;/div&gt;
&lt;script src="js/vue.min.js"&gt;&lt;/script&gt;// 导入vue
&lt;script&gt;
    new Vue({
      el: '#app'
    })
&lt;/script&gt;
</code></pre>
<p><strong>Vue实例</strong></p>
<p><strong>1.实例成员--挂载点(el:实例)</strong><br>
vue如何与HTML页面结构建立关联:通过挂载点</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="zh"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;vue导入&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id="app"&gt;
    &lt;hr&gt;
    &lt;p class="p1"&gt;{{ }}&lt;/p&gt;
    &lt;hr&gt;
    &lt;p class="p1"&gt;{{ }}&lt;/p&gt;
    &lt;hr&gt;
    &lt;p id="p"&gt;
      &lt;b&gt;{{ }}&lt;/b&gt;
      &lt;i&gt;{{ }}&lt;/i&gt;
    &lt;/p&gt;

&lt;/div&gt;
&lt;/body&gt;
&lt;!--vue导入--&gt;
&lt;script src="代码/js/vue.js"&gt;&lt;/script&gt;
&lt;script&gt;
    console.log(Vue);
    new Vue({
      el: '.p1', // 只能解析一个
    // });
    // new Vue({
    //   el: '.p2'
    // })
    //new Vue({
    //   el: '#p'
    })


    // new Vue({
    //   el: '#app'
    // })
    // el 为挂载点,载有css3选择器语法与页面标签进行绑定,决定该 Vue对象控制的页面范围
    // 1. 挂载点只检索页面中第一个匹配到的结果,就算有几个类名相同,也只能匹配一个,所以挂载点一般都采用id选择器
    // 2. html与body标签不可以作为挂载点(组件中解释)
    // 3. 一个页面可以出现多个实例对应多个挂载点
    // 4. 实例只操作挂载点内部内容
&lt;/script&gt;
&lt;/html&gt;
</code></pre>
<p><em><strong>注意:</strong></em></p>
<ul>
<li>html和body不能作为挂载点</li>
<li>一个vue对象挂载点只能索引一个匹配结果,就算有几个类名取一样的,也是只能匹配第一个,所以挂载点一般用id标识。</li>
<li>一个页面中可以出现多个实例对应多个挂载点</li>
<li>实例只操作挂载点内部内容</li>
</ul>
<p><strong>JS对象(字典)补充</strong></p>
<pre><code class="language-html">let b = 20
let dic = {
                a: 10,//字典本身就是对象,key都是字符串形式可以省略引号
        //        b: b ,//简写为以下形式
                b       //注意:当值为变量时,且与key同名, 可以简写以上形式
};
</code></pre>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset='UTF-8'&gt;

&lt;/head&gt;
&lt;body&gt;

&lt;/body&gt;
&lt;script src="代码/js/vue.js/"&gt;&lt;/script&gt;
&lt;script&gt;
    let b = 20;
    let dic = {
      a: 10,
      b
    };
    console.log(dic)// {a: 10, b: 20}
&lt;/script&gt;
&lt;/html&gt;
</code></pre>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="zh"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;js的对象&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;/body&gt;
&lt;script src="js/vue.js"&gt;&lt;/script&gt;
&lt;script&gt;
    // 1.js中没有字典,只要对象类型,可以把对象当做字典来使用
    // 2.key本质是属性名,所以都是字符串类型(可以出现1,true),其实都是省略引号的字符串

    let sex = '男';
    let dic = {
      'name': 'Owen',
      1: 100,
      true: 12345,
      age: 18,
      // sex: 'sex',
      sex,
    };
    console.log(dic['name']);
    console.log(dic['1']);
    console.log(dic['true']);
    console.log(dic['age']);
    console.log(dic.sex);

    dic.price = 3.5;
    console.log(dic.price);

    // 声明类创建对象,类可以实例化n个对象,哪个对象调用,this就代表谁
    function People(name, age) {
      this.name = name;
      this.age = age;
      this.eat = function () {
            console.log(this.name + '在吃饭');
            return 123
      }
    }
    let p1 = new People('Owen', 17.5);
    console.log(p1.name);
    let res = p1.eat();
    console.log(res);

    // 直接声明对象,{}内的key都属于当前对象的
    // {}中的方法通常会简写
    let stu1 = {
      name: '张三',
      age: 18,
      // eat: function () {
      //   console.log(this.name + '在吃饭');
      // }
      eat () {
            console.log(this.name + '在吃饭');
      }
    };
    stu1.eat()

    // 总结:
    // 1.{}中直接写一个变量:key与value是同名,value有该名变量提供值
    // 2.es5下,所有的函数都可以作为类,类可以new声明对象,在函数中用 this.资源 为声明的对象提供资源
    // 3.{}中出现的函数叫方法,方法可以简写 { fn: function(){} } =&gt; { fn(){} }
&lt;/script&gt;
&lt;/html&gt;
</code></pre>
<p><strong>实例成员--变量</strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset='UTF-8'&gt;
    &lt;title&gt;变量&lt;/title&gt;

&lt;/head&gt;
&lt;body&gt;
    &lt;div id="app"&gt;
      &lt;p&gt;{{ msg }}&lt;/p&gt;   // 设置变量
      &lt;p&gt;{{ info }}&lt;/p&gt;
    &lt;/div&gt;
    &lt;div id="main"&gt;
      &lt;p&gt;{{ msg }}&lt;/p&gt;
      &lt;p&gt;{{ info }}&lt;/p&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;script src="代码/js/vue.js"&gt;&lt;/script&gt;
&lt;script&gt;
    // 实例成员中的 data是为vue页面模板提供数据变量的
    let app =new Vue({
      el: '#app',
      data:{
            msg: '我是变量msg',
            info: '我是变量info'
      }
    });// data 为定义的变量提供数据

    let main = new Vue({
      el: '#main',
      data: {
            msg: 'msg',
            info: 'info'
      }
    });

    console.log(app.msg);// 我是变量msg
    console.log(main.info);

    // 创建vue实例用:(new Vue),传进去的字典(对象)的Key,称之为vue实例成员(变量)
    // 访问实例成员,用 vue实例.$成员名, eg: app.$el
    console.log(app.$el);
    console.log(app.$data);
    console.log(app.$data.info) //我是变量info
&lt;/script&gt;
&lt;/html&gt;
</code></pre>
<p><strong>实例成员--数据(data:数据)</strong></p>
<pre><code>1.实例成员data为vue环境提供数据,数据采用字典{}形式
2.显示数据的时候在插值表达式{{ }}中,直接书写数据的key来访问数据
3.如果需要在外部获取数据可以通过接受实例的变量app(标签id值或者class值),访问实例成员(实例成员用$开头),间接访问数据; eg: app.$data.info
4.在外部获取数据也可以通过实例变量app(标签id值或者class值)直接访问数据; eg: app.info
5.在vue实例内部的方法methods中,使用 this.info 访问数据(this其实就相当于app)
</code></pre>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset='UTF-8'&gt;
   &lt;title&gt;实例成员数据&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div id="app"&gt;
      &lt;!--{{ }} 是插值表达式,里面的 info、msg等是 vue 的变量--&gt;
      &lt;p&gt;{{ info }}&lt;/p&gt;
      &lt;p&gt;{{ msg }}&lt;/p&gt;
      &lt;p&gt;{{ num }}&lt;/p&gt;
      &lt;p&gt;{{ arr }}&lt;/p&gt;
      &lt;p&gt;{{ dic }}&lt;/p&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;script src="代码/js/vue.js/"&gt;&lt;/script&gt;
&lt;script&gt;
    let app = new Vue({   // 用let 取一个变量名app, 方便外面取值
      el: '#app',
      data: {
            info: '我是值info',
            msg: 'message',
            num: 100,
            arr: ,
            dic: {
                name: 'Owen', age: 18
            }
      }
    });
&lt;/script&gt;
&lt;script&gt;
    console.log(app);
    console.log(app.$data.num) ; //100 间接访问数据
    console.log(app.num)         // 100 直接访问数据
&lt;/script&gt;
&lt;/html&gt;
</code></pre>
<p><strong>实例成员--过滤器</strong></p>
<pre><code>1.过滤器本身就是数据处理函数,可以将插值表达式中的数据作为参数进行处理,得到的函数返回值就是处理后的结果
2.过滤器的使用语法{{ ...变量 | 过滤器(...变量)}}# ()里面的变量可以全部写在前面的变量中
3.过滤器在实例中用filters成员提供
</code></pre>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="zh"&gt;
&lt;head&gt;
    &lt;meta charset='UTF-8'&gt;
    &lt;title&gt;过滤器&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div id="app"&gt;
      &lt;!--默认将msg作为参数传给filterFn--&gt;
      &lt;p&gt;{{ msg | filterFn }}&lt;/p&gt;

      &lt;!--过滤器串联--&gt;
      &lt;p&gt;{{ num | f1 | f2 }}&lt;/p&gt;

      &lt;!--过滤器可以同时多个变量进行过滤,变量用,分割,过滤器还可以额外传入参数辅助过滤--&gt;
      &lt;!--过滤器方法接收所有传入的参数,按传入的位置进行接收--&gt;
      &lt;p&gt;{{ msg, num | f3(666, '好的') }}&lt;/p&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;script src="代码/js/vue.js"&gt;&lt;/script&gt;
&lt;script&gt;
    new Vue({
      el: '#app',
      data: {
            msg: '文本内容',
            num: 1
      },
      filters: {
            filterFn(v1,v2){
                // console.log(v1);
                // console.log(v2);
                return `&lt;b&gt;${v1}&lt;/b&gt;`// &lt;b&gt;文本内容&lt;/b&gt;
                // return v1
            },
            f1(v1){
                return v1 * 100;//100
            },
            f2(v1){
                return v1 * 100;//10000
            },
            f3(v1, v2, v3, v4){
                console.log(v1);//文本内容
                console.log(v2);// 1
                console.log(v3);//666
                console.log(v4);//好的
            }
      },

    });

&lt;/script&gt;
&lt;/html&gt;
</code></pre>
<pre><code class="language-html">&lt;div id="app"&gt;
&lt;!--插值表达式也可以直接做简单运算--&gt;
&lt;p&gt;{{num*2}}&lt;/p&gt;      #200
&lt;p&gt;{{num | f1 }}&lt;/p&gt;    #101
&lt;p&gt;{{10,20,30,40 | f2 }}&lt;/p&gt;#100
&lt;p&gt;{{10,20 | f2(30,40) }}&lt;/p&gt;#100
&lt;p&gt;{{ 120 | f2 }}&lt;/p&gt;   #NaN               &lt;!--120 undefined undefined undefined--&gt;

&lt;/div&gt;

&lt;script src="js/vue.min.js"&gt;&lt;/script&gt;
&lt;script&gt;
new Vue({
      el:'#app',
      data:{
          num:100
      },
      filters:{
          f1(num){
             return num+1
          },
          f2:function (a,b,c,d) {
            console.log(a,b,c,d);
            return a+b+c+d
          }
      }
})
&lt;/script&gt;
</code></pre>
<p><strong>vue指令</strong></p>
<p><strong>1.文本指令 v-text/v-html</strong></p>
<pre><code>1.插值表达式同 v-text 指令,渲染普通文本
2.v-html 指令可以渲染有html语法的文本,能够解析html语法
3.文本指令中可以渲染变量也可以渲染常量
</code></pre>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="zh"&gt;
&lt;head&gt;
    &lt;meta charset='UTF-8'&gt;
    &lt;title&gt;文本指令&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div id="app"&gt;
      &lt;!--插值表达式,能够完成变量渲染,变量基础运算,变量方法调用,不能完成复杂运算(一步解决不了的,不能出现)--&gt;
      &lt;p&gt;{{ msg }}&lt;/p&gt;
      &lt;p&gt;{{ msg + '拼接内容' }}&lt;/p&gt;
      &lt;p&gt;{{ msg }}&lt;/p&gt;
      &lt;p&gt;{{ msg.slice(2,4) }}&lt;/p&gt;

      &lt;hr&gt;
      &lt;!--v-text:将所有内容做文本渲染--&gt;
      &lt;p v-text="msg + '拼接内容'"&gt;&lt;/p&gt;

      &lt;!--v-html: 可以解析html语法标签的文本--&gt;
      &lt;p v-text="'&lt;b&gt;' + msg + '&lt;/b&gt;'"&gt;&lt;/p&gt;&lt;!--v-text无法渲染标签--&gt;
      &lt;P v-html="'&lt;b&gt;' + msg + '&lt;/b&gt;'"&gt;&lt;/P&gt;

      &lt;p v-text="`&lt;b&gt;${msg}&lt;/b&gt;`"&gt;&lt;/p&gt;
      &lt;p v-html="`&lt;b&gt;${msg}&lt;/b&gt;`"&gt;&lt;/p&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;script src="代码/js/vue.js"&gt;&lt;/script&gt;
&lt;script&gt;
    new Vue({
      el: '#app',
      data: {
            msg: '文本指令',
      }
    })
&lt;/script&gt;
&lt;/html&gt;
</code></pre>
<pre><code class="language-html">&lt;div id="app"&gt;
    &lt;p&gt;{{ info }}&lt;/p&gt;

    &lt;!--1)v-指令名="变量",变量是需要data提供数据值的--&gt;
    &lt;p v-text="info"&gt;&lt;/p&gt;
    &lt;!--2)v-指令名="常量",常量采用常量基本的语法,数字与布尔类型等可以直接书写的直接书写,字符串等需要特殊符号的需要添加符号--&gt;
    &lt;p v-text="123"&gt;&lt;/p&gt;
    &lt;p v-text="true"&gt;&lt;/p&gt;
    &lt;p v-text="'abc' + info"&gt;&lt;/p&gt;
    &lt;p v-text=""&gt;&lt;/p&gt;

    &lt;!--3)v-html可以解析html语法--&gt;
    &lt;p v-html="`&lt;b style='color:red'&gt;好的&lt;/b&gt;`"&gt;&lt;/p&gt;
    &lt;p v-text="'&lt;b&gt;好的&lt;/b&gt;'"&gt;&lt;/p&gt;   
&lt;/div&gt;
&lt;script src="js/vue.js"&gt;&lt;/script&gt;
&lt;script&gt;
    new Vue({
      el: '#app',
      data: {
            info: 'data提供的数据',
      }
    })
&lt;/script&gt;
</code></pre>
<p><strong>事件指令 v-on (v-on重点需要记住是可以简写成@格式,并需要记住语法格式)</strong></p>
<pre><code>1.语法:v-on:事件名='函数名(参数们)'
2.简写:@事件名='函数名(参数们)'
3.用 methods 实例成员提供事件函数的实现
4.事件传参:函数名 | 函数名() | 函数名(自定义参数) | 函数名($event,自定义参数)
</code></pre>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="zh"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;&lt;/title&gt;
    &lt;style&gt;
      body {
            /*页面文本不允许选择*/
            user-select: none;
      }
      .low-num {
            cursor: pointer;
      }
      .low-num:hover {
            color: red;
      }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div id="app"&gt;
      &lt;!-- 事件指令:v-on:事件名="事件函数名"   --&gt;
      &lt;p class="low-num" v-on:click="lowNum"&gt;
            &lt;span&gt;点击减一:&lt;/span&gt;
            &lt;span&gt;{{ num }}&lt;/span&gt;
      &lt;/p&gt;

      &lt;p v-on:dblclick="dblAction"&gt;双击&lt;/p&gt;

      &lt;!-- v-on:事件名="事件函数" 可以简写为 @事件名="事件函数"--&gt;
      &lt;p @mouseover="overAction()"&gt;悬浮&lt;/p&gt;
      &lt;p @mouseover="overAction(10)"&gt;悬浮1&lt;/p&gt;
      &lt;p @mouseover="overAction(10, 20)"&gt;悬浮2&lt;/p&gt;
      &lt;p @mouseover="overAction(10, 20, $event)"&gt;悬浮3&lt;/p&gt;

    &lt;/div&gt;
&lt;/body&gt;
&lt;script src="js/vue.js"&gt;&lt;/script&gt;
&lt;script&gt;
    let app = new Vue({
      el: '#app',
      data: {
            num: 99
      },
      methods: {
            lowNum: function () {
                // 在vue实例内部的方法中,使用变量
                // alert(this.num)
                this.num -= 1;
            },
            dblAction (ev) {
                // alert('双击事件');
                console.log(ev)
            },
            overAction(a, b, c) {
                console.log(a, b, c)
            }
      }
    })
&lt;/script&gt;

&lt;/html&gt;
</code></pre>
<pre><code>v-on:click='事件函数名'       鼠标点击事件
v-on:dbclick='事件函数名'    双击事件
v-mouseover='事件名函数'    鼠标悬浮事件
</code></pre>
<pre><code>事件的两种写法:
1. v-on:事件名='事件函数名'
2.@事件名='事件函数名'


事件传参的四种方法:
1.@事件 = '事件函数'   默认传入事件对象 $event
2.@事件 = '事件函数()'    不传递任何参数
3.@事件 = '事件函数(参数1,参数2,...)'      只传递自定义参数
4.@事件 = '事件函数($event,参数1,参数2...)'      自定义传参是传递事件对象
复制代码
</code></pre>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset='UTF-8'&gt;
    &lt;title&gt;事件&lt;/title&gt;
    &lt;style&gt;
      body{
            /*页面不运行被选中*/
            user-select: none;
      }
      .p1:hover{
            cursor:pointer;
            color: green;
      }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div id="app"&gt;
      &lt;p class="p1" v-on:click="fn"&gt;这是一个段落,被点击了{{ count }}次&lt;/p&gt;
      &lt;p class="p2" v-on:mouseover="overAction" v-on:mouseout="outAction"&gt;该标签被{{ action }}&lt;/p&gt;

      &lt;divv-on:mouseover="overAction" v-on:mouseout="outAction"&gt;div被{{ action }}&lt;/div&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;script src="代码/js/vue.js"&gt;&lt;/script&gt;
&lt;script&gt;
    let app = new Vue({
      el: '#app',
      data: {
            count: 0,
            action: '渲染',
      },
      //methods是为vue实例提供事件函数的
      methods:{
            fn: function () {
                // app.count ++
                this.count ++   //this代表当前该vue实例对象
            },
            overAction: function () {
                this.action = '悬浮'
            },
            outAction: function () {
                this.action = '离开'
            }
      }
    })
&lt;/script&gt;
&lt;/html&gt;
</code></pre>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset='UTF-8'&gt;
    &lt;title&gt;事件指令&lt;/title&gt;
    &lt;style&gt;
      .box{
            width: 200px;
            height: 200px;
            background-color: yellowgreen;
      }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div id="app"&gt;
      &lt;!--时间指令:v-on:事件名='事件函数'--&gt;
      &lt;!--简写:@事件名='事件函数'--&gt;
      &lt;p v-on:click="f1"&gt;被点击了{{ count }}下&lt;/p&gt;
      &lt;hr&gt;
      &lt;p @click="f2"&gt;{{ p2 }}&lt;/p&gt;
      &lt;hr&gt;

      &lt;!--绑定事件函数可以添加(),添加括号就代表要传递参数--&gt;
      &lt;ul&gt;
            &lt;li @click="f3(100)"&gt;{{ arr }}&lt;/li&gt;
            &lt;li @click="f3(200)"&gt;{{ arr }}&lt;/li&gt;
            &lt;li @click="f3(300)"&gt;{{ arr }}&lt;/li&gt;
      &lt;/ul&gt;
      
      &lt;ul&gt;
            &lt;li @click="f4(0)"&gt;{{ arr }}&lt;/li&gt;
            &lt;li @click="f4(1)"&gt;{{ arr }}&lt;/li&gt;
            &lt;li @click="f4(2)"&gt;{{ arr }}&lt;/li&gt;
      &lt;/ul&gt;
      &lt;hr&gt;

      &lt;!--绑定的事件函数如果没有传递参数,默认传入 事件对象--&gt;
      &lt;div class="box" @click="f5"&gt;&lt;/div&gt;
      &lt;hr&gt;

      &lt;!--事件函数一旦添加传参(),系统就不再传递任何参数,需要事件对象时,可以手动传入$event--&gt;
      &lt;div class="box" @click="f6(10, $event)"&gt;&lt;/div&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;script src="代码/js/vue.js"&gt;&lt;/script&gt;
&lt;script&gt;
    new Vue({
      el: '#app',
      data: {
            count:0,
            p2: '第二个p',
            arr:
      },
      methods:{
            f1 () {
            this.count ++
      },
            f2() {
                console.log(this.p2)
            },
            f3(num) {
                console.log(num)
            },
            f4(index) {
                console.log(this.arr)
            },
            f5(ev, b) {
                console.log(ev);
                console.log(b);
            },
            f6(num, ev) {
                console.log(num);
                console.log(ev);
            }
      },

    })
&lt;/script&gt;
&lt;/html&gt;
</code></pre>
<p><strong>属性指令 v-bind (需要注意的是style、class属性设置)</strong></p>
<pre><code>1.语法: v-bing:属性名='变量'
2.简写: :属性名='变量'
3.单值属性绑定::title='变量'|   :id='变量'   |:自定义属性='变量'
4.style属性绑定   :style='字典变量'   |   :style='{css属性1:变量1, ..., css属性n: 变量n}'
5.class属性绑定:   :class='变量'   |   :class='[变量1,...,变量n]'| :class='{类名: 布尔变量}'
</code></pre>
<pre><code>&lt;!DOCTYPE html&gt;
&lt;html lang="zh"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;属性指令&lt;/title&gt;
    &lt;style&gt;
      .b1 {
            width: 100px;
            height: 100px;
            background-color: red;
      }

      .box1 {
            width: 150px;
            height: 150px;
            background-color: darkturquoise;
            transition: .3s;
      }
      .box2 {
            width: 300px;
            height: 100px;
            background-color: darkgoldenrod;
            transition: .3s;
      }

      .circle {
            border-radius: 50%;
      }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div id="app"&gt;
      &lt;!--1.下方的class、id、title、abc等是div标签的属性,属性指令就是控制它们的--&gt;
      &lt;div class="b1" id="b1" v-bind:title="title" :abc="xyz"&gt;&lt;/div&gt;
      &lt;!--2.属性指令:v-bind:属性名="变量",简写方式 :属性名="变量" --&gt;

      &lt;!--3.属性指令操作 style 属性--&gt;
      &lt;div style="width: 200px;height: 200px;background-color: greenyellow"&gt;&lt;/div&gt;
      &lt;!-- 通常:变量值为字典 --&gt;
      &lt;div :style="mys1"&gt;&lt;/div&gt;
      &lt;!-- 了解:{中可以用多个变量控制多个属性细节} --&gt;
      &lt;div :style="{width: w,height: '200px',backgroundColor: 'deeppink'}"&gt;&lt;/div&gt;


      &lt;!--重点:一般vue都是结合原生css来完成样式控制 --&gt;
      &lt;!--&lt;div :class="c1"&gt;&lt;/div&gt;--&gt;

      &lt;!--class可以写两份,一份写死,一份有vue控制--&gt;
      &lt;div class="box1" :class="c2"&gt;&lt;/div&gt;

      &lt;!--{}控制类名,key为类名,key对应的值为bool类型,决定该类名是否起作用--&gt;
      &lt;div :class="{box2:true, circle:cable}" @mouseover="changeCable(1)" @mouseout="changeCable(0)"&gt;&lt;/div&gt;


      &lt;!--[]控制多个类名--&gt;
      &lt;div :class=""&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;
&lt;/body&gt;
&lt;script src="js/vue.js"&gt;&lt;/script&gt;
&lt;script&gt;
    let app = new Vue({
      el: '#app',
      data: {
            title: '12345',
            xyz: 'opq',
            mys1: {
                width: '200px',
                height: '200px',
                // 'background-color': 'greenyellow'
                backgroundColor: 'pink',
            },
            w: '200px',
            c1: 'box1',
            c2: 'circle',
            cable: false,
            c3: 'box1',
            c4: 'circle'
      },
      methods: {
            changeCable(n) {
                this.cable = n;
            }
      }
    });

    setInterval(function () {
      // app.c1 = app.c1 === 'box1' ? 'box2' : 'box1';
      if (app.c1 === 'box1') {
            app.c1 = 'box2';
      } else {
            app.c1 = 'box1';
      }
    }, 300)


&lt;/script&gt;
&lt;/html&gt;
</code></pre>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="zh"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;属性指令&lt;/title&gt;
    &lt;style&gt;
       {
            color: orange;
      }

      .ccc {
            background-color: yellowgreen;
            color: greenyellow;
            border-radius: 50%;
      }
      .ccc1 {
            background-color: yellowgreen;
      }
      .ccc2 {
            color: greenyellow;
      }
      .ccc3 {
            border-radius: 50%;
      }

      .ttt {
            background-color: gold;
            color: orange;
      }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div id="app"&gt;
      &lt;!--1) 语法:v-bind:属性名="变量" --&gt;
      &lt;p id="p1" class="p1" style="" title="" index=""&gt;属性指令1&lt;/p&gt;
      &lt;p id="p2" v-bind:class="p1" style="" title="" index=""&gt;属性指令2&lt;/p&gt;

      &lt;p v-bind:index="p1"&gt;自定义属性也可以被vue绑定1&lt;/p&gt;
      &lt;!--2) v-bind:属性名="变量" 简写 :属性名="变量" --&gt;
      &lt;p :index="p1"&gt;自定义属性也可以被vue绑定2&lt;/p&gt;
      &lt;p :title="'文本提示'"&gt;悬浮文本提示&lt;/p&gt;

      &lt;!--3) style样式属性绑定 --&gt;
      &lt;p :style="myStyle"&gt;样式绑定1&lt;/p&gt;
      &lt;p :style="{backgroundColor: c1, color: c2, 'border-radius': '50%'}"&gt;样式绑定2&lt;/p&gt;

      &lt;!--4) class类属性绑定 --&gt;
      &lt;p :class="myc1"&gt;样式绑定3&lt;/p&gt;
      &lt;p :class=""&gt;样式绑定4&lt;/p&gt;
      &lt;!--xxx是类名,是否起作用有布尔类型变量yyy值决定 --&gt;
      &lt;p :class="{xxx:yyy}"&gt;样式绑定5&lt;/p&gt;


      &lt;!--案例:点击切换类名是否起作用--&gt;
      &lt;p @click="clickAction" :class="{ttt:yyy}"&gt;点击切换类&lt;/p&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;script src="js/vue.js"&gt;&lt;/script&gt;
&lt;script&gt;
    new Vue({
      el: '#app',
      data: {
            p1: 'q1',
            myStyle: {       #style样式属性绑定
                backgroundColor: 'pink',
                color: 'deeppink',
                'border-radius': '50%'
            },
            c1: 'cyan',
            c2: 'tan',
            myc1: 'ccc',   #class类属性绑定
            myc2: 'ccc1',
            myc3: 'ccc2',
            myc4: 'ccc3',
            yyy: true,// false
      },
      methods: {
            clickAction() {
                this.yyy = !this.yyy;
            }
      }
    })
&lt;/script&gt;
&lt;/html&gt;
</code></pre><br><br>
来源:https://www.cnblogs.com/chmily/p/11841344.html
頁: [1]
查看完整版本: 前端开发Vue框架--(一)