• 1.vue-1


    1.es5和es6比较

    es6的基本语法

    var:声明变量不严谨 --- es5
    let:声明变量严谨  --- es6
    
    let特点:   
    1.变量局部作用域有作用:if(){let a=11},大括号外拿不到a的值
    2.不存在变量提升(先声明在使用)  
    3.不能重复声明
    4 let声明的全局变量不从属于window对象,var声明的全局变量从属于window对象。
    
    关于第4个特点的简单说明:
    	
    	ES5声明变量只有两种方式:var和function。
    	ES6有let、const、import、class再加上ES5的var、function共有六种声明变量的方式。
    	
        还需要了解顶层对象:浏览器环境中顶层对象是window.
    	ES5中,顶层对象的属性等价于全局变量。var a = 10; window.a 
    	ES6中,有所改变:var、function声明的全局变量,依然是顶层对象的属性;let、const、class声明的全局变量不属于顶层对象的属性,也就是说ES6开始,全局变量和顶层对象的属性开始分离、脱钩,目的是以防声明的全局变量将window对象的属性造成污染,因为window对象是顶层对象,它里面的属性是各个js程序中都可以使用的,不利于模块化开发,并且window对象有很多的自有属性,也为了防止对window的自由属性的污染,所以在ES6中将顶层对象和全局变量进行隔离。
    	举例:
    		var a = 1;
    		console.info(window.a);  // 1
    		let b = 2;
    		console.info(window.b); //undefined
    
    模板字符串:tab键上面的反引号,${变量名}来插入值  
    	let bb = 'jj';
    	var ss = `你好${bb}`;
      console.log(ss); -- '你好jj'
    
    const pi = 3.1415926; 声明常量: 特点和let一样,只不过const声明的量,是不可改变的量
    const :特点:  1.局部作用域  2.不存在变量提升  3.不能重复声明  4.一般声明不可变的量
    

    es5和es6的函数对比

        //ES5写法
        function add(x){
            return x
        }
        add(5);
        //匿名函数
        var add = function (x) {
            return x
        };
    		add(5);
        //ES6的匿名函数
        let add = function (x) {
            return x
        };
        add(5);
    		
    
        //ES6的箭头函数,就是上面方法的简写形式
        let add = (x) => {
            return x
        };
        console.log(add(20));
        //更简单的写法,但不是很易阅读
        let add = x => x;
        console.log(add(5));
        多个参数的时候必须加括号,函数返回值还是只能有一个,没有参数的,必须写一个()
        let add = (x,y) => x+y;
    

    自定义对象中封装函数的写法

    this的指向问题

    箭头函数改变this指向 -- 指向自定义函数父级对象

       // 1.es5 对象中封装函数的方法
        var name = '子俊';
        var person1 = {
            name:'超',
            age:18,
            f1:function () {  //在自定义的对象中放函数的方法
                console.log(this);//this指向的是当前的对象person1,{name: "超", age: 18, f1: ƒ}
                console.log(this.name)  // '超'
            }
        };
        person1.f1();  //调用函数
    
    	// 2. ES6中自定义对象中来封装箭头函数,this指向person2父级对象
        var name = '子俊';
        var person2 = {
            name:'超',
            age:18,
            f1: () => {  
                console.log(this); //this指向的不再是当前的对象了,而是指向了person2的父级对象(称为上下文),而此时的父级对象是我们的window对象,
                console.log(window); //还记得window对象吗,全局浏览器对象,打印结果和上面一样
                console.log(this.name)  // 子俊
            }
        };
        person2.f1();  //调用函数
    
        // 3. ES6中自定义对象中来封装箭头函数,this指向person3父级对象
        let name = '子俊'; 
        let person3 = {
            name:'超',
            age:18,
            f1: () => {  
                console.log(this); //this指向person3的父级对象,而此时的父级对象是我们的window对象,
                console.log(window); //还记得window对象吗,全局浏览器对象,打印结果和上面一样
                console.log(this.name)  // undefind,let声明的变量不属于Windows对象
            }
        };
        person3.f1(); //调用函数
    
    
        // 3.而我们使用this的时候,希望this是person对象,而不是window对象,单体模式写:
        let person4 = {
            name:'超',
            age:18,
            //f1:function(){}简写;
            f1(){  //相当于f1:function(){},只是一种简写方式,称为对象的单体模式写法,vue里面会看用到这种方法
                console.log(this);//this指向的是当前的对象person4,{name: "超", age: 18, f1: ƒ}
                console.log(this.name)  //'超'
            }
        };
        person4.f1()
    

    es5和es6的类写法对比(了解)

    <script>
        // 1. es5写类的方式
        
        function Person(name,age) {
            //封装属性,不能在里边声明方法
            this.name = name;  //this--Python的self
            this.age = age;
        }
    
        //封装方法,原型链prototype
        Person.prototype.f1 = function () {
            console.log(this.name);//this指的是Person对象, 结果:'超'
        };
        //封装方法,箭头函数的形式写匿名函数
        Person.prototype.f2 = ()=>{
            console.log(this); //this指向的是window对象
        };
    
        var p1 = new Person('超',18); // 使用new实例化类
        p1.age
        p1.f1();
    
    
        // 2 .es6里面的类怎么写
        class Person2{
            constructor(name,age){ //对象里面的单体模式,这个方法类似于python的__init__()构造方法,写参数的时候也可以写关键字参数 constructor(name='超2',age=18)
                //封装属性
                this.name = name;
                this.age = age;
            }  //注意这里不能写逗号
            
            showname(){  //封装方法
                console.log(this.name);
            }  //不能写逗号
        }
    
        let p2 = new Person2('超2',18); // 实例化对象
        p2.showname()  //调用方法  '超2'
        //es6的类也是可以继承的--用的extends和super
    
    </script>
    
    

    2. vue.js的快速入门使用

    1.1 vue.js库的下载

    vue.js是目前前端web开发最流行的工具库,由尤雨溪在2014年2月发布的。

    另外几个常见的工具库:react.js /angular.js

    官方网站:

    ​ 中文:https://cn.vuejs.org/

    根据提示:下载开发版本vue.js

    1.2 vue.js库的基本使用

    vue的引入类似于jQuery,开发中可以使用开发版本vue.js,产品上线要换成生产版本vue.min.js。

    1.vue中的变量可以直接进行一些简单直接的js操作

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    <div id="app">
        <h1>{{num+3}}</h1> <!--支持四则运算-->
        <h1>{{num>10?'真的':'假的'}}</h1> <!--支持三元运算-->
        <h1>{{msg.split('').reverse().join('')}}</h1> <!--文字反转,可以使用js方法和属性-->
        <h1>{{person.name}}</h1> <!--通过据点号取字典里的值-->
    </div>
    
    </body>
    <script src="vue.js"></script> <!--引入vue-->
    <script>
        let vm = new Vue({
            el:'#app',  // 圈地,划分vue控制范围,标签内部可以使用vue语法,外部用不了
            //数据属性写法 方式1 (了解)
            // data:{
            //     msg:'hello world!',
            // },
    
            //数据属性写法 方式2 单体函数模式 -- 常用
            data(){
                return {
                    msg:'hello world!',
                    num:11,
                    person:{name:'呵呵',age:11},
                }
            },
        })
    </script>
    </html>
    

    2.总结:

    1. vue的使用要从创建Vue对象开始
       var vm = new Vue();
       
    2. 创建vue对象的时候,需要传递参数,是自定义对象,自定义对象对象必须至少有两个属性成员
       var vm = new Vue({
         el:"#app",
    	 data: {
             数据变量:"变量值",
             数据变量:"变量值",
             数据变量:"变量值",
         },
       });
       
       el:圈地,划地盘,设置vue可以操作的html内容范围,值就是css的id选择器,其他选择器也可以,但是多用id选择器。
       data: 保存vue.js中要显示到html页面的数据。
       
    3. vue.js要控制器的内容外围,必须先通过id来设置。
      <div id="app">
          <h1>{{message}}</h1>
          <p>{{message}}</p>
      </div>
    

    1.3 vue.js的M-V-VM思想

    MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式。

    Model 		指代的就是vue对象的data属性里面的数据。
    
    View  		指代的就是vue中数据要显示的HTML标签中,在vue中,也称之为“视图模板” 。
    
    ViewModel   数据驱动视图
    

    在浏览器中可以在 console.log通过 vm对象可以直接访问el和data属性,甚至可以访问data里面的数据

    console.log(vm.$el)     # #box  vm对象可以控制的范围
    console.log(vm.$data);  # vm对象要显示到页面中的数据
    console.log(vm.message);# 这个message就是data里面声明的数据,也可以使用 vm.变量名显示其他数据
    

    2. Vue指令系统的常用指令

    指令 (Directives) 是带有“v-”前缀的特殊属性。每一个指令在vue中都有固定的作用。在标签中使用
    
    在vue中,提供了很多指令,常用的有:v-html、v-if、v-model、v-for等等。
    

    2.1 文本指令v-html和v-text

    	v-text -- 相当于js代码的innerText,直接在html中插值了,插的就是文本内容
    
    ​	v-html -- 相当于innerHtml,可以识别标签
    
    ​	数据发生变化时,会同时改变元素中的其控制的内容或属性
    
    <body>
    
    <div id="app">
        <h1>{{msg}}</h1>
        <h1 v-text="msg"></h1> <!--v-text只能识别文本-->
        <h1 v-html="atag"></h1><!--v-html可以识别标签-->
    </div>
    
    </body>
    <script src="vue.js"></script>
    <script>
        let vm =new Vue({
            el:'#app',
            data(){
                return{
                    msg:'hello',
                    atag:'<a href="">百度</a>'
                }
            },
        })
    
    </script>
    

    2.2 条件渲染指令v-if和v-show

    v-if : 只有条件为真,才能生成标签
    	是动态的增加和删除标签,整个文档节点都会重新加载一遍,当我们频繁进行标签的显示和隐藏时,可以使用v-show
    
    v-show: 不管显示隐藏,初始加载时都会生成标签
    	真-显示和假-隐藏标签,使用的是css样式display:none来隐藏的
    
    <body>
    
    <div id="app">
        <h1 v-if="num>10">num大于10</h1> 
        <h1 v-else-if="num<10">num小于10</h1>
        <h1 v-else>num等于10</h1>
        <h1 v-show="num>10" style="color: red">呵呵呵</h1>
    </div>
    
    </body>
    <script src="vue.js"></script>
    <script>
        let vm =new Vue({
            el:'#app',
            data(){
                return{
                    num:10,
                }
            },
        })
    </script>
    

    2.3 操作-绑定标签属性v-bind

    格式:

    <标签名 :标签属性="data属性"></标签名>
    
    <body>
    
    <div id="app">
        <a v-bind:href="addr">百度1</a> <!--绑定标签属性,使用data数据属性-->
        <a :href="addr">百度2</a> <!--简写-->
    </div>
    
    </body>
    <script src="vue.js"></script>
    <script>
        let vm =new Vue({
            el:'#app',
            data(){
                return{
                    addr:'http://www.baidu.com'
                }
            },
        })
    </script>
    

    2.4 事件绑定v-on和methods属性

    有两种事件操作的写法,@事件名 和 v-on:事件名 --绑定的全部都是js的事件名

    例1:完成商城的商品增加减少数量

    <body>
    
    <div id="app">
    <button v-on:click="num++">+1</button>
    <!--<button @click="num++">+1</button>-->
        <p>{{num}}</p>
    <button @click="janfa">-1</button>
    </div>
    
    </body>
    <script src="vue.js"></script>
    <script>
        let vm =new Vue({
            el:'#app',
            data(){
                return{
                    num:10,
                }
            },
            methods:{
                janfa(){ 
                    if (this.num<=0){ //this指向vue对象
                        this.num=0
                    }
                    else {
                        this.num--;
                    }
                },
            },
        })
    </script>
    

    例2:wifi密码切换显示

    <body>
    <div id="app">
    
        <input :type="type">
        <button @click="change">{{btn_text}}</button>
    
    </div>
    </body>
    <script src="vue.js"></script>
    <script>
        let vm =new Vue({
            el:'#app',
            data(){
                return{
                    btn_text:'显示密码',
                    type:'password',
                }
            },
            methods:{
                change(){
                    if(this.type == 'password'){
                        this.btn_text = '隐藏密码';
                        this.type = 'text';
                    }else {
                        this.btn_text = '显示密码';
                        this.type = 'password';
                    }
                },
            },
        })
    </script>
    </html>
    

    2.5 操作样式

    2.5.1 控制标签class类名

    格式:
       <h1 :class="值">元素</h1>  值可以是对象、对象名、数组(数组的方式用的比较少)
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .c1{
                background-color: red;
                 100px;
                height: 100px;
            }
            .c2{
                background-color: blue;
                 100px;
                height: 100px;
            }
        </style>
    </head>
    <body>
    <div id="app">
    
        <div :class="xx"></div>  
        <div :class="c1:status"></div>  <!--真,加c1样式-->
        <div :class="c1:num>10"></div>  <!--真,加c1样式-->
        <div :class="status?'c1':'c2'"></div>  <!--三元运算真,加c1样式-->
    
    </div>
    </body>
    <script src="vue.js"></script>
    <script>
        let vm =new Vue({
            el:'#app',
            data(){
                return{
                    status:true,
                    num:11,
                    xx:'c1'
                }
            },
        })
    </script>
    </html>
    

    2.5.2 控制标签style样式

    格式1:值是json对象,对象写在元素的:style属性中
    	 标签元素:
    		     <div :style="{color: activeColor, fontSize: fontSize + 'px' }"></div>
    				<!-- 注意:不能出现中横杠,有的话就套上引号'font-size',或者去掉横杠,后一个单词的首字母大写,比如fontSize -->
    	 data数据如下:
             data: {
                 activeColor: 'red',
                 fontSize: '30px'
             }
    格式2:值是对象变量名,对象在data中进行声明
       标签元素:
       			<div v-bind:style="styleObject"></div>
       data数据如下:
             data: {
    			return{
                	styleObject: {
                 		color: 'red',
                 		fontSize: '13px'  
    			  			}
    				  }
    			}
    

    2.5.3 实例-vue版本选项卡

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            #card{
                 500px;
                height: 350px;
            }
            .title{
                height:50px;
            }
            .title span{
                 100px;
                height: 50px;
                background-color:#ccc;
                display: inline-block; /* 内联-块状标签 */
                line-height: 50px; /* 设置行和当前元素的高度相等,就可以让文本内容上下居中 */
                text-align:center;
            }
            .content .list{
                 500px;
                height: 300px;
                background-color: yellow;
                display: none; /* 隐藏 */
            }
            .content .active{
                display: block; /* 变成块状标签 */
            }
    
            .title .current{
                background-color: yellow;
            }
        </style>
        <script src="vue.js"></script>
    </head>
    <body>
    
        <div id="card">
            <div class="title">
                <span :class="{current:num===0}" @click="num=0">国内新闻</span>
                <span :class="{current:num===1}" @click="num=1">国际新闻</span>
                <span :class="{current:num===2}" @click="num=2">银河新闻</span>
                <!--<span>{{num}}</span>-->
            </div>
            <div class="content">
                <div class="list" :class="{active:num===0}">国内新闻列表</div>
                <div class="list" :class="{active:num===1}">国际新闻列表</div>
                <div class="list" :class="{active:num===2}">银河新闻列表</div>
            </div>
        </div>
        <script>
            // 思路:
            // 当用户点击标题栏的按钮[span]时,显示对应索引下标的内容块[.list]
            // 代码实现:
            var card = new Vue({
                el:"#card",
                data(){
                    return{
                    	num:0,
                    }
                },
            });
        </script>
    
    </body>
    </html>
    

    2.6 列表渲染指令v-for

    在vue中,可以通过v-for指令可以将一组数据渲染到页面中,数据可以是数组或者字典。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div id="app">
        <ul>
            <li v-for="(value,index) in list" :key="value">{{value}}--{{index}}</li>
            <!--通过:key指定生成的标签,刷新网页不会再重复创建了,提高了页面渲染效率-->
            <!--重点:不通过:key绑定标签,频繁的调整标签顺序会导致数据混乱-->
        </ul>
        <ul>
            <li v-for="(value,index) in dict" :key="value">{{value}}--{{index}}</li>
        </ul>
    
    </div>
    </body>
    <script src="vue.js"></script>
    <script>
        let vm = new Vue({
            el:'#app',
            data(){
                return{
                    list:['11','22','33','44'],
                    dict:{
                        'name':'贾英贺',
                        'age':18,
                        'sex':'男'
                    },
                }
            },
        })
    
    </script>
    </html>
    

    练习:

    goods:[
    	{"name":"python入门","price":150},
    	{"name":"python进阶","price":100},
    	{"name":"python高级","price":75},
    	{"name":"python研究","price":60},
    	{"name":"python放弃","price":110},
    ]
    
    # 把上面的数据采用table表格输出到页面,价格大于60的那一条数据需要添加背景色
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .c1{
                background-color: aqua;
            }
        </style>
    </head>
    <body>
    <div id="app">
        <table>
            <thead>
                <th>名字</th>
                <th>价格</th>
            </thead>
            <tbody>
                <tr v-for="(goods_value,goods_index) in goods" :key="goods_index" :class="{c1:goods_value.price>60}">
                    <td>{{goods_value.name}}</td>
                    <td>{{goods_value.price}}</td>
                </tr>
            </tbody>
        </table>
    </div>
    </body>
    <script src="vue.js"></script>
    <script>
        let vm = new Vue({
            el:'#app',
            data(){
                return{
                    goods:[
                        {"name":"python入门","price":150},
                        {"name":"python进阶","price":100},
                        {"name":"python高级","price":75},
                        {"name":"python研究","price":60},
                        {"name":"python放弃","price":110},
                        ]
                }
            },
        })
    
    </script>
    </html>
    

    2.7 双向数据绑定v-model

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div id="app">
        <h1>{{num}}</h1>
        <input type="text" v-model="num"> <!--数据发生变化,h1标签也发生变化-->
    </div>
    </body>
    <script src="vue.js"></script>
    <script>
        let vm = new Vue({
            el:'#app',
            data(){
                return {
                    num:10,
                }
            },
        })
    </script>
    </html>
    

    3. Vue对象提供的属性功能

    3.1 过滤器

    过滤器,就是vue允许开发者自定义的文本格式化函数,可以使用在两个地方:输出内容和操作数据中。

    定义过滤器的方式有两种,全局过滤器和局部过滤器

    3.1.1 使用Vue.filter()进行全局定义

    Vue.filter("RMB1", function(v){
      	//就是来格式化(处理)v这个数据的
      	if(v==0){
        		return v
      	}
      	return v+"元"
    })
    

    3.1.2 在vue对象中通过filters属性来定义

    var vm = new Vue({
      el:"#app",
      data:{},
      filters:{
        RMB2:function(value){
          if(value==''){
            return;
          }else{
          	return '¥ '+value;
          }
        }
    	}
    });
    

    示例:

    <body>
    <div id="app">
        <h1>{{num|rmb}}</h1>                    <!--全局过滤器使用-->
        <h1>{{num|yuan('xx','oo')|fang}}</h1>    <!--传递参数,多层过滤器使用-->
    </div>
    </body>
    <script src="vue.js"></script>
    <script>
        // 全局过滤器,所有的vue对象都可以使用
        Vue.filter('rmb',function (res){
            return res + '你好'
        })
    
        let vm = new Vue({
            el:'#app',
            data(){
                return {
                    num:100
                }
            },
            // 局部过滤器
            filters:{
                yuan(res,m,n){ //定义过滤器
                    return res + '元' + m + n
                },
                fang(res){
                    return res + '方'
                }
            }
        })
    
    </script>
    

    3.2 计算和侦听属性

    3.2.1 计算属性computed

    我们之前学习过字符串反转,如果直接把反转的代码写在元素中,则会使得其他同事在开发时时不易发现数据被调整了,所以vue提供了一个计算属性(computed),可以让我们把调整data数据的代码存在在该属性中。其实计算属性主要用于监听,可以监听多个对象,后面学了监听之后再说。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div id="app">
        <h1>{{xx}}</h1>
    </div>
    </body>
    <script src="vue.js"></script>
    <script>
        let vm = new Vue({
            el:'#app',
            data(){
                return{
                    num1:10,
                    num2:20,
                }
            },
            computed:{
              xx:function () {
                  let sum = this.num1 + this.num2
                  return sum.toFixed(2) //保留两位小数
              }
            },
        })
    </script>
    </html>
    

    3.2.2 监听属性watch

    watch侦听属性,可以帮助我们侦听data某个数据的变化,从而做相应的自定义操作。

    侦听属性是一个对象,它的键是要监听的对象或者变量,值一般是函数,当侦听的data数据发生变化时,会自定执行的对应函数,这个函数在被调用时,vue会传入两个形参,第一个是变化后的数据值,第二个是变化前的数据值。

    示例:用户名长度限制

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div id="app">
        <form action="" method="post">
            账号:<input type="text" v-model="username"><span :style="user_style">{{user_text}}</span>
        </form>
    </div>
    </body>
    <script src="vue.js"></script>
    <script>
        let vm = new Vue({
            el:'#app',
            data(){
                return{
                    username:'',
                    user_style: {
                        color:''
                    },
                    user_text:'',
                }
            },
            watch:{
                 'username'(res){
                     if(res.length>=4 && res.length<=10){
                         this.user_style.color = 'blue'
                         this.user_text = '用户名长度合法!'
                     }else {
                         this.user_style.color = 'red'
                         this.user_text = '用户名长度只能是4-10位!'
                     }
                 }
            },
    
        })
    </script>
    </html>
    

    3.3 vue对象的生命周期钩子函数

    每个Vue对象在创建时都要经过一系列的初始化过程。在这个过程中Vue.js会自动运行一些叫做生命周期的的钩子函数,我们可以使用这些函数,在对象创建的不同阶段加上我们需要的代码,实现特定的功能。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div id="app">
        <h1>{{num}}</h1>
    </div>
    </body>
    <script src="vue.js"></script>
    <script>
        let vm = new Vue({
            el:'#app',
            data(){
                return {
                    num:10,
                }
            },
            // 1.在还没有加载vue时,自动触发函数 --可用页面加载动画
            beforeCreate:function () {
                console.log(this.$el)   //undefined
                console.log(this.$data) //undefined
            },
            // 2.在vue对象加载上数据属性之后,自动触发函数
            // 发送网络请求(ajax),向后台请求数据,然后赋值给某个属性进行处理
            created:function () {
                console.log(this.$el)   //undefined
                console.log(this.$data) // num:10
            },
            // 3.在vue加载视图之后,自动触发
            beforeMount:function () {
                console.log(this.$el)   //<h1>{{num}}</h1>
                console.log(this.$data) // num:10
            },
            // 4.在数据驱动视图之后,自动触发
            mounted:function (){
                console.log(this.$el)   //<h1>10</h1>
                console.log(this.$data) // num:10
            },
            // 主要是2,4 -- 其他了解
        })
    </script>
    </html>
    

    3.4 阻止事件冒泡和刷新页面

    使用.stop和.prevent

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .c1{
                background-color: red;
                height: 200px;
                 200px;
            }
            .c2{
                background-color: blue;
                height: 100px;
                 100px;
            }
        </style>
    </head>
    <body>
    <div id="app">
        <div class="c1" @click="f1">
    <!--        <div class="c2" @click.stop="f2"></div>  阻止事件冒泡,否则点击跳出2次警告页面-->
            <div class="c2" @click.stop.prevent="f2"></div>
        </div>
        <a href="http://www.baidu.com" @click.stop.prevent="">百度</a>
        <!--阻止标签自带属性,点击不跳转网页了-->
    </div>
    </body>
    <script src="vue.js"></script>
    <script>
        let vm = new Vue({
            el:'#app',
            data(){
                return {
                }
            },
            methods:{
                f1(){
                    alert(11)
                },
                f2(){
                    alert(22)
                }
            }
        })
    </script>
    </html>
    
  • 相关阅读:
    111. Minimum Depth of Binary Tree (Tree; DFS)
    124. Binary Tree Maximum Path Sum (Tree; DFS)
    99. Recover Binary Search Tree (Tree; DFS)
    129. Sum Root to Leaf Numbers(Tree; DFS)
    PAT 1073 Scientific Notation
    PAT 1050 String Subtraction
    PAT 1037 Magic Coupon
    PAT 1066 Root of AVL Tree
    PAT 1053 Path of Equal Weight
    PAT 1040 Longest Symmetric String
  • 原文地址:https://www.cnblogs.com/jia-shu/p/14594078.html
Copyright © 2020-2023  润新知