首页 > 其他分享 >Day03 - Vue语法使用

Day03 - Vue语法使用

时间:2023-09-22 12:46:34浏览次数:48  
标签:Vue console log Day03 price list 语法 item name

JS循环方式

JS循环方式

    // 方式一: js循环----->for()------>基于索引的循环
    let i = 0
    for (; i < 10;) {
        console.log(i)
        i++
    }

    let list = [1, 2, 3, 4, 5, 6, 7, 8]
    for (let j = 0; j < list.length; j++) {
        console.log(list[j])
    }

    // 方式二: in循环 基于迭代的循环,依赖于索引取值,python中基本都是迭代取值
    let list = [1, 2, 3, 4, 5, 6, 7, 8]
    for (const listKey in list) {
        console.log("-------listKey", listKey) //索引
        console.log("+++++++value", list[listKey]) //值
  
    // 方式三: of 循环 跟python中的in用法一样
    let list = [1, 2, 3, 4, 5, 6, 7, 8]
    for (const item of list) {
        console.log(item) //值
    }
        
    // 方式四: 数组自己的循环方法 ----->forEach
    let list = [1, 2, 3, 4, 5, 6, 7, 8]
    list.forEach(function (value,index){
        console.log(value) // 值
        console.log(index) // 索引
    })
    
    // 方式五: jQuery的循环
    let list = [1, 2, 3, 4, 5, 6, 7, 8]
    $.each(list, function (value, index) {
        console.log(value) // 索引
        console.log(index) // 值
    })

Key值的解释

# vue中使用v-for的时候,在标签上,会看到有  key 属性
	- :key="item"   用的属性指令
	-key对应的值必须是唯一的
    
# 在循环的标签上,加key值的好处是,加速虚拟dom的替换
	-区别只在循环的变量变化时,效率高低
    -但是一定要注意:vule必须唯一

Vue.set的使用

// 以后可能会遇到,数据变了,页面没变的情况
	-不能直接更改,借助于vue提供的方法,vue.Set 更改
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="icon" href="/favicon.ico">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="src/JS/Vue.js"></script>
    <script src="src/JS/jQuery.js"></script>
    <script src="src/bootstrap/js/bootstrap.min.js"></script>
    <link rel="stylesheet" href="src/bootstrap/css/bootstrap.min.css">
    <script type="module" src="/src/main.js"></script>
    <title></title>
</head>

<body>
<div id="app1">
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-6 col-md-offset-3">
                <div class="text-center">
                    <button class="btn btn-success" @click="cat_goods">点我显示购物车</button>
                    <button class="btn btn-danger" @click="delete_goods">点我删除书籍</button>
                    <button class="btn btn-info" @click="rollback">反转</button>
                    <button class="btn btn-info" @click="set_data">修改第一条数据</button>
                    <table class="table table-bordered">
                        <thead>
                        <tr>
                            <th>商品ID</th>
                            <th>商品名字</th>
                            <th>商品价格</th>
                            <th>商品数量</th>
                        </tr>
                        </thead>
                        <tbody>
                        <tr v-for="goods in goods_list">
                            <td>{{ goods.id }}</td>
                            <td>{{ goods.name }}</td>
                            <td>{{ goods.price }}</td>
                            <td>{{ goods.count }}</td>
                        </tr>
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    </div>
</div>
</body>
<script>
    let vm = new Vue({
        el: "#app1",
        data: {
            goods_list: []
        },
        methods: {
            cat_goods() {
                this.goods_list = [
                    {id: 1, name: '钢笔', price: 9.9, count: 4},
                    {id: 2, name: '足球', price: 99, count: 4},
                    {id: 3, name: '篮球', price: 44, count: 32},
                    {id: 4, name: '电脑', price: 1299, count: 48},
                    {id: 5, name: '鼠标', price: 23, count: 4},
                    {id: 6, name: '脸盆', price: 8, count: 4},
                ]
            },
            delete_goods() {
                this.goods_list.pop()
            },
            rollback() {
                this.goods_list.reverse()
            },
            set_data() {
                // this.goods_list[0] = {id: 7, name: '超大钢笔', price: 999, count: 444}
                // 这种修改方式只是数据进行了修改,并没有将修改过后的数据渲染
                // console.log(this.goods_list)
                Vue.set(this.goods_list, 0, {id: 7, name: '超大钢笔', price: 999, count: 444})
            }
        },
    })
</script>
</html>

v-model的使用

:value="username" 对input标签做绑定,它只能单项的绑定,js变量变,页面会变,页面变,js变量不会变
v-model是Vue.js框架中的指令,用于实现双向数据绑定。通过v-model,可以将表单元素的值与Vue实例的数据属性进行绑定,从而实现数据的双向同步

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="icon" href="/favicon.ico">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="src/JS/Vue.js"></script>
    <script src="src/JS/jQuery.js"></script>
    <script src="src/bootstrap/js/bootstrap.min.js"></script>
    <link rel="stylesheet" href="src/bootstrap/css/bootstrap.min.css">
    <script type="module" src="/src/main.js"></script>
    <title></title>
</head>

<body>
<div id="app1">
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-6 col-md-offset-3">
                <div class="text-center">
                    <h1>V-model的使用</h1>
                    <p>username:<input type="text" v-model="username"></p>
                    <p>password:<input type="password" v-model="password"></p>
                    <button class="btn btn-success" @click="login">登录</button>
                </div>
            </div>
        </div>
    </div>
</div>
</body>
<script>
    let vm = new Vue({
        el: "#app1",
        data: {
            username: '',
            password: '',
        },
        methods: {
            login() {
                console.log(this.username)
                console.log(this.password)
            }
        },
    })
</script>

</html>

事件处理

事件的基本使用

// input 标签事件

input 	当输入框进行输入的时候 触发事件
change 	当元素的值发生改变的时候 触发的事件,光标移走才检测
blur 	当输入框失去焦点的时候 出发事件
focus 	光标到input表框上触发事件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="icon" href="/favicon.ico">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="src/JS/Vue.js"></script>
    <script type="module" src="/src/main.js"></script>
    <title></title>
</head>

<body>
<div id="app1">
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-6 col-md-offset-3">
                <div class="text-center">
                    <h1>input标签事件</h1>
                    <h2>input事件,在输入框输入的时候触发</h2>
                    <p><input type="text" v-model="value" @input="handerInput">----{{ value }}</p>
                    <h2>change事件,修改元素的值的时候触发</h2>
                    <p><input type="text" v-model="value1" @change="handerChange">----{{ value1 }}</p>
                    <h2>blur事件,失去焦距的触发</h2>
                    <p><input type="text" v-model="value2" @blur="handerBlur">----{{ value2 }}</p>
                    <h2>focus事件,聚焦的时候触发</h2>
                    <p><input type="text" v-model="value3" @focus="handerFocus">----{{ value3 }}</p>
                </div>
            </div>
        </div>
    </div>
</div>
</body>
<script>
    let vm = new Vue({
        el: "#app1",
        data: {
            value: '',
            value1: '',
            value2: '',
            value3: '',
        },
        methods: {
            handerInput() {
                console.log("handerInput")
            },
            handerChange() {
                console.log("handerChange")
            },
            handerBlur() {
                console.log("handerBlur")
            },
            handerFocus() {
                console.log("handerFocus")
            }
        },
    })
</script>

</html>

过滤案例

// 补充1、indexOf 方法
// 判断一个字符串是不是在另一个字符串里面
	indexOf是一个在字符串中搜索指定字符或子字符串的方法。它返回字符或子字符串第一次出现的索引位置,如果找不到则返回-1

<script>
    let name = "hello my name is yangfuhua"
    console.log(name.indexOf("my"))
</script>

// 补充二、数组的过滤
// 数组的filter方法----->需要传入一个匿名函数,匿名函数接受一个参数,它会循环该数组,一次次地调用这个匿名函数,并且传入循环得到的值
// 这个匿名函数返回true,表示这个值做保留,返回false,表示这个值不做保留
<script>
    let list = ['a', 'at', 'atom', 'be', 'beyond', 'cs', 'csrf', 'e', 'egg', 'eabc']
    datalist = list.filter(function (item) {
        return true
    })
    console.log(datalist)
</script>

// 补充三、箭头函数
//1 之前写法
var f = function () {
    console.log('f执行了')
}
f()
//2 变成箭头函数     参数和函数体之间加了箭头
var f = () => {
    console.log('f执行了')
}
f()

// 3 带参数箭头函数,带一个参数,可以简写
var f = (a) => {
    console.log(a)
}
var f = a => {
    console.log(a)
}
f('lqz')
// 4 有多个参数,不能简写
var f = (a, b) => {
    console.log(a, b)
}
f('lqz', 19)

// 5 有一个返回值
var f = (a, b) => {
    return a + b
}
console.log(f(1, 19))

// 6 可以省略
var f = (a, b) => a + b
console.log(f(1, 19))

// 7 一个参数,一个返回值
var f = name => name + '_NB'
console.log(f('lqz'))

//////////////////////////////过滤
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="icon" href="/favicon.ico">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="src/JS/Vue.js"></script>
    <script src="src/JS/jQuery.js"></script>
    <script src="src/bootstrap/js/bootstrap.min.js"></script>
    <link rel="stylesheet" href="src/bootstrap/css/bootstrap.min.css">
    <script type="module" src="/src/main.js"></script>
    <title></title>
</head>

<body>
<div id="app1">
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-6 col-md-offset-3">
                <div class="text-center">
                    <h1>过滤案例</h1>
                    <input type="text" v-model="myText" @input="handleInput">
                    <p v-for="item in new_list">{{ item }}</p>
                </div>
            </div>
        </div>
    </div>
</div>
</body>
<script>
    let vm = new Vue({
        el: "#app1",
        data: {
            myText: "",
            dataList: ['a', 'at', 'atom', 'be', 'beyond', 'cs', 'csrf', 'e', 'egg', 'agg'],
            new_list: [],
        },
        methods: {
            handleInput() {
                // 写法一
                // let _this = this
                // this.new_list = this.dataList.filter(function (item) {
                //     return item.indexOf(_this.myText) >= 0;
                // })
                // 写法二 使用箭头函数
                this.new_list = this.dataList.filter((item => item.indexOf(this.myText) >= 0))
            }
        },
    })
</script>

</html>

事件修饰符

// 事件修饰符,主要阻止冒泡事件

.stop // 只处理自己的事情,父控件冒泡的时间不处理(阻止事件冒泡)
.self // 只处理自己的事件,子控件冒泡的事件不处理
.prevent // 阻止a链接的跳转
.once // 事件只会触发一次(刷新后还可以在触发)



<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="icon" href="/favicon.ico">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="src/JS/Vue.js"></script>
    <script src="src/JS/jQuery.js"></script>
    <script src="src/bootstrap/js/bootstrap.min.js"></script>
    <link rel="stylesheet" href="src/bootstrap/css/bootstrap.min.css">
    <script type="module" src="/src/main.js"></script>
    <title></title>
</head>

<body>
<div id="app1">
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-6 col-md-offset-3">
                <div class="text-center">
                    <h1>事件修饰符 stop和self</h1>
                    <h2>子标签事件,冒泡到父标签上,----->阻止 stop 放在子标签上</h2>
                    <ul @click.self="handerfu">
                        <li @click.stop="handerone">第一个li</li>
                        <li @click="handertwo">第二个li</li>
                        <li @click="handerthree">第三个li</li>
                    </ul>
                    <h2>阻止a的跳转</h2>
                    <a href="https://www.baidu.com" @click.prevent="handerA">点我看美女</a>
                    <h2>once只能点击一次</h2>
                    <button class="btn btn-success" @click.once="handerbutton">点我秒杀</button>
                </div>
            </div>
        </div>
    </div>
</div>
</body>
<script>
    let vm = new Vue({
        el: "#app1",
        data: {},
        methods: {
            handerfu() {
                console.log("父标签被点击了")
            },
            handerone() {
                console.log("第一个子标签")
            },
            handertwo() {
                console.log("第二个子标签")
            },
            handerthree() {
                console.log("第三个子标签")
            },
            handerA() {
                console.log("点击了A标签")
            },
            handerbutton() {
                console.log("秒杀成功")
            }
        },
    })
</script>

</html>

表单控制

radio、checkbox


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="icon" href="/favicon.ico">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="src/JS/Vue.js"></script>
    <script src="src/JS/jQuery.js"></script>
    <script src="src/bootstrap/js/bootstrap.min.js"></script>
    <link rel="stylesheet" href="src/bootstrap/css/bootstrap.min.css">
    <script type="module" src="/src/main.js"></script>
    <title></title>
</head>

<body>
<div id="app1">
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-6 col-md-offset-3">
                <div class="text-center">
                    <h1>表单控制</h1>
                    <form action="">
                        <!--                        用户名密码-->
                        username:<input type="text" v-model="username">
                        password:<input type="password" v-model="password">

                        <!--                        性别-->
                        man:<input type="radio" v-model="gender" value="1">
                        women:<input type="radio" v-model="gender" value="2">
                        None:<input type="radio" v-model="gender" value="0">

                        <!--                        兴趣爱好-->
                        篮球:<input type="checkbox" value="篮球" v-model="hobby">
                        足球:<input type="checkbox" value="足球" v-model="hobby">
                        乒乓球:<input type="checkbox" value="乒乓球" v-model="hobby">
                        橄榄球:<input type="checkbox" value="橄榄球" v-model="hobby">

                        <!--                        记住密码-->
                        记住密码:<input type="checkbox" v-model="is_rem">
                        <input type="button" @click="handersubmit" value="提交">


                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
</body>
<script>
    let vm = new Vue({
        el: "#app1",
        data: {
            username: "",
            password: "",
            gender: "",
            hobby: [],
            // checkbox单选 返回的不是 true 就是 false
            is_rem:''
        },
        methods: {
            handersubmit() {
                console.log(this.username, this.password, this.gender, this.hobby,this.is_rem)
            }
        },
    })
</script>

</html>

购物车案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="icon" href="/favicon.ico">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="src/JS/Vue.js"></script>
    <script src="src/JS/jQuery.js"></script>
    <script src="src/bootstrap/js/bootstrap.min.js"></script>
    <link rel="stylesheet" href="src/bootstrap/css/bootstrap.min.css">
    <script type="module" src="/src/main.js"></script>
    <title></title>
</head>

<body>
<div id="app1">
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-6 col-md-offset-3">
                <div class="text-center">
                    <h1>基本购物车</h1>
                    <table class="table table-bordered">
                        <thead>
                        <tr>
                            <th>id号</th>
                            <th>商品名字</th>
                            <th>商品价格</th>
                            <th>商品数量</th>
                            <th>全选/全不选 <input type="checkbox" v-model="checkboxAll" @click="handercheckbox"></th>
                        </tr>
                        </thead>
                        <tbody>
                        <tr v-for="item in goods_list">
                            <td>{{ item.id }}</td>
                            <td>{{ item.name }}</td>
                            <td>{{ item.price }}</td>
                            <td>{{ item.count }}</td>
                            <td><input type="checkbox" v-model="checkboxall" :value="item" @click="handerone"></td>
                        </tr>
                        </tbody>
                    </table>
                    <hr>
                    商品总价:{{ get_price() }}
                    <hr>
                    商品详情:{{ checkboxall }}
                </div>
            </div>
        </div>
    </div>
</div>
</body>
<script>
    let vm = new Vue({
        el: "#app1",
        data: {
            goods_list: [
                {id: 1, name: 'XXX', price: 99, count: 2},
                {id: 2, name: '西柚记', price: 59, count: 1},
                {id: 3, name: '水壶转', price: 89, count: 5},
            ],
            checkboxAll: false,
            checkboxall: []
        },
        methods: {
            // 商品价格运算
            get_price() {
                let total = 0
                for (const item of this.checkboxall) {
                    console.log(item)
                    total += item.price * item.count
                }
                return total

            },
            handercheckbox() {
                if (this.checkboxAll) {
                    this.checkboxall = []

                } else {
                    this.checkboxall = this.goods_list
                }
            },
            handerone() {
                if (this.checkboxall.length === this.goods_list.length) {
                    this.checkboxAll = true
                } else {
                    this.checkboxAll = false
                }
            }
        },
    })
</script>

</html>

带加减和全选

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="icon" href="/favicon.ico">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="src/JS/Vue.js"></script>
    <script src="src/JS/jQuery.js"></script>
    <script src="src/bootstrap/js/bootstrap.min.js"></script>
    <link rel="stylesheet" href="src/bootstrap/css/bootstrap.min.css">
    <script type="module" src="/src/main.js"></script>
    <title></title>
</head>

<body>
<div id="app1">
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-6 col-md-offset-3">
                <div class="text-center">
                    <h1>基本购物车</h1>
                    <table class="table table-bordered">
                        <thead>
                        <tr>
                            <th>id号</th>
                            <th>商品名字</th>
                            <th>商品价格</th>
                            <th>商品数量</th>
                            <th>全选/全不选 <input type="checkbox" v-model="checkboxAll" @click="handercheckbox"></th>
                        </tr>
                        </thead>
                        <tbody>
                        <tr v-for="item in goods_list">
                            <td>{{ item.id }}</td>
                            <td>{{ item.name }}</td>
                            <td>{{ item.price }}</td>
                            <td><span class="btn btn-success" @click="item.count++">+</span>{{ item.count }}
                                <span class="btn btn-danger" @click="handleJian(item)">-</span>
                            </td>
                            <td><input type="checkbox" v-model="checkboxall" :value="item" @click="handerone"></td>
                        </tr>
                        </tbody>
                    </table>
                    <hr>
                    商品总价:{{ get_price() }}
                    <hr>
                    商品详情:{{ checkboxall }}
                </div>
            </div>
        </div>
    </div>
</div>
</body>
<script>
    let vm = new Vue({
        el: "#app1",
        data: {
            goods_list: [
                {id: 1, name: 'XXX', price: 99, count: 2},
                {id: 2, name: '西柚记', price: 59, count: 1},
                {id: 3, name: '水壶转', price: 89, count: 5},
            ],
            checkboxAll: false,
            checkboxall: []
        },
        methods: {
            get_price() {
                let total = 0
                for (const item of this.checkboxall) {
                    console.log(item)
                    total += item.price * item.count
                }
                return total

            },
            handercheckbox() {
                if (this.checkboxAll) {
                    this.checkboxall = []

                } else {
                    this.checkboxall = this.goods_list
                }
            },
            handerone() {
                if (this.checkboxall.length === this.goods_list.length) {
                    this.checkboxAll = true
                } else {
                    this.checkboxAll = false
                }
            },
            handleJian(item) {
                if (item.count > 1){
                    item.count--
                }else {
                    alert("商品数量最少为1")
                }
            }
        },
    })
</script>

</html>

v-moder的其他用法

v-model 之 lazy、number、trim的使用

lazy:等待input框的数据绑定时去焦点之后再变化
number:数字卡头,只保留数字,后面的字母不保留;字母开头,都保留
trim:去除首位的空格


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="icon" href="/favicon.ico">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="src/JS/Vue.js"></script>
    <script src="src/JS/jQuery.js"></script>
    <script src="src/bootstrap/js/bootstrap.min.js"></script>
    <link rel="stylesheet" href="src/bootstrap/css/bootstrap.min.css">
    <script type="module" src="/src/main.js"></script>
    <title></title>
</head>

<body>
<div id="app1">
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-6 col-md-offset-3">
                <div class="text-center">
                    <h1>v-model 之 lazy、number、trim的使用</h1>
                    <p><input type="text" v-model.lazy="value">------{{ value }}</p>
                    <p><input type="text" v-model.number="value1">------{{ value1 }}</p>
                    <p><input type="text" v-model.trim="value2">------{{ value2 }}</p>
                </div>
            </div>
        </div>
    </div>
</div>
</body>
<script>
    let vm = new Vue({
        el: "#app1",
        data: {
            value: '',
            value1: '',
            value2: '',
        },
        methods: {},
    })
</script>

</html>

标签:Vue,console,log,Day03,price,list,语法,item,name
From: https://www.cnblogs.com/chao0308/p/17722054.html

相关文章

  • Day02 - Vue 基础知识
    模版语法<body><divid="app1"><h1>模版语法</h1><p>渲染字符串,------姓名:{{name}}</p><p>渲染字符串,------年龄:{{age}}</p><p>渲染数组类型,------>:{{list1}}</p><p>渲染数组类型按照索引取值......
  • Day01 - Vue介绍
    前端介绍1HTML(5)、CSS(3)、JavaScript(ES5、ES6、ES11):编写一个个的页面->给后端(PHP、Python、Go、Java)->后端嵌入模板语法->后端渲染完数据->返回数据给前端->在浏览器中查看2Ajax的出现->后台发送异步请求,Render+Ajax混合3单用Ajax(加载数据,DOM渲染页面):......
  • Day06 - Vue项目的使用
    解析Vue项目//1为什么浏览器中访问某个地址,会显示某个页面组件 -根组件:App.Vue必须是:<template><divid="app"><router-view></router-view></div></template> -配置路由: //先导入 importy......
  • Day05 - Vue之动态组件、插槽、项目的创建
    动态组件//关键字: component//使用方法:<component:is="who"></component>//component标签的is属性等于组件名字,这里就会显示这个组件<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><link......
  • Vue中qs的使用
    1、qs是什么qs是一个增加了一些安全性的查询字符串解析和序列化字符串的库。可以进行对象与字符串之间的一个转换。2、qs安装qs,是axios中自带的,也是npm仓库所管理的包。安装方式:npminstallqsVue项目导入:importqsfrom'qs'Vue项目中的main.js中设置全局属性的方式:Vue......
  • VUE中的data(){return}与data:{}区别
    组件是一个可复用的实例,当你引用一个组件的时候,组件里的data是一个普通的对象,所有用到这个组件的都引用的同一个data,就会造成数据污染。data:{}data:{msg:0}使用return包裹后数据中变量只在当前组件中生效,不会影响其他组件。data(){return}data(){......
  • vue3 父子组件通信 setup
    父传子father<template><div><h2>父传子Father</h2><!--<buttonclass="bg-green-300roundedp-1">父按钮</button>--><divclass="w-[200px]h-[200px]bg-violet-200">......
  • VUE3+vite+arco design 项目初始化
    意见反馈系统总结创建项目首先选择一个文件夹进入命令窗口使用vite创建项目npmcreatevite@latest初始化项目后进入项目安装依赖npminstall运行npmrundev使用arcodesign组件库安装npminstall--save-dev@arco-design/web-vue引入import{createApp}fr......
  • Vue3组件通信方式
    Vue3组件通信方式不管是vue2还是vue3,组件通信方式很重要,不管是项目还是面试都是经常用到的知识点。比如:vue2组件通信方式props:可以实现父子组件、子父组件、甚至兄弟组件通信自定义事件:可以实现子父组件通信全局事件总线$bus:可以实现任意组件通信pubsub:发布订阅模式......
  • vue 解决报错
    目录vue解决报错ERRORError:EBUSY:resourcebusyorlocked,rmdir....errnoarco-init项目初始化失败!Error:spawnSyncpnpm.cmdENOENTvue解决报错ERRORError:EBUSY:resourcebusyorlocked,rmdir....errno最近入门vue,用字节跳动的arco初始化一个项目的时候报错......