Vue2基本用法

Vue2基本用法

基本el和data用法

通过el挂载dom节点,通过data传递变量

<body>
    <div id="app">{{message}}</div>
    <script>
        let app = new Vue({
            el: '#app',
            data: {
                message: 'Hello'
            }
        })
    </script>
</body>

v-bind绑定标签属性

可以绑定类名来切换样式,可以绑定img的src来加载图片,动态绑定a标签的herf属性,可以简写成一个冒号

<body>
    <div class="app">
        <span v-bind:title="message">
            鼠标请移动到我
        </span>
    </div>
    <script>
        let app = new Vue({
            el: '.app',
            data: {
                message: '鼠标悬停看到我'
            }
        })
    </script>
</body>

通过v-if和v-show来改变元素可见性

v-if和v-show的区别:

v-if通过改变dom节点来改变元素可见性,直接删除和添加节点,不断改变dom树性能占用高

v-show是通过改变元素的display样式来改变元素可见性,整体初始化的性能占用高

需要频繁切换的元素推荐用v-show,不频繁切换的可以用v-if

<body>
    <div id="app">
        <div id="if" v-if="vif">
            这里是v-if
        </div>
        <div id="show" v-show="vshow">
            这里是v-show
        </div>
    </div>
    <script>
        let app = new Vue({
            el: '#app',
            data: {
                vif: true,
                vshow: false
            }

        })
    </script>
</body>

通过v-for来加载列表

v-for和forEach用法很像,遍历一个数组中的元素,然后进行填充

<body>
    <div id="app">
        <ol>
            <li v-for="todo in todos">
                {{ todo.text }}
            </li>
        </ol>
    </div>

    <script>
        let app = new Vue({
            el: '#app',
            data: {
                todos: [{
                    text: '学习vue'
                }, {
                    text: '整个'
                }, {
                    text: '牛项目'
                }]
            }
        })
    </script>
</body>

通过v-on绑定事件

v-on可以给元素绑定事件,然后执行一个回调函数,回调函数写在vue实例的methods中,但是需要注意回调函数不能写成
()=>{}

必须要写成
function(){}

否则,Vue实例会找不到函数,因为箭头函数并没有this,this 会作为变量一直向上级词法作用域查找,直至找到为止

另外V-on可以简写成一个@

<body>
    <div id="app">
        <p>{{ message }}</p>
        <button v-on:click="reverseMessage">反转消息</button>
    </div>
    <script>
        let app = new Vue({
            el: '#app',
            data: {
                message: 'Hello'
            },
            methods: {
                reverseMessage: function() {
                    this.message = this.message.split('').reverse().join('')
                }
            }
        })
    </script>
</body>

Vue本身属性

Vue实例中可以用this来获取自身,然后通过 $ 访问自身属性,如el,data等,methods中的函数可以直接通过this.来取到,不需要再加 $ ,另外还可以使用$来调用实例本身的一些方法,比如 watch

<body>
    <div id="app">
        <p>
            {{num}}
        </p>
        <button @click="getVue">得到Vue实例</button>
    </div>
    <script>
        let message = {
            num: 1
        }
        let app = new Vue({
                el: '#app',
                data: message,
                methods: {
                    //注意不能使用箭头函数,因为其没有this
                    getVue: function() {
                        console.log(this)
                        console.log(this.$el)
                        console.log(this.$data)
                        console.log(this.getVue)
                    }
                }
            })
            //监听Vue实例中的num属性,只要有变化就执行一个回调函数,有两个参数
        app.$watch('num', function(newValue, oldValue) {
                console.log(newValue)
                console.log(oldValue)
            })
            //设置一个循环来改变num的值
        setInterval(() => {
            message.num++
        }, 1000)
    </script>
</body>

Vue表单渲染

Vue通过v-model可以实现双向数据绑定,通过data可以传入初始值,最常用input,搭配label标签和$watch方法,以此来检测数据变化,然后执行回调,也可以配合v-for实现列表渲染

<body>
    <div id="app">
        <input v-model="message" placeholder="edit me">
        <p>Message is: {{ message }}</p>
    </div>

    <div id="app2">
        <input type="checkbox" id="jack" value="Jack" v-model="checkedNames">
        <label for="jack">Jack</label>
        <input type="checkbox" id="john" value="John" v-model="checkedNames">
        <label for="john">John</label>
        <input type="checkbox" id="mike" value="Mike" v-model="checkedNames">
        <label for="mike">Mike</label>
        <br>
        <span>Checked names: {{ checkedNames }}</span>
        <ol>
            <li v-for="name in checkedNames">{{name}}</li>
        </ol>
    </div>

    <script>
        //v-model的数据绑定
        let app = new Vue({
                el: '#app',
                data: function() {
                    return {
                        message: ''
                    }
                }
            })
            //数组填充
        let list = {
            checkedNames: []
        }
        let app2 = new Vue({
                el: '#app2',
                data: list
            })
            //数据有变化就可以执行回调
        app2.$watch('checkedNames', function(newValue, oldValue) {
            console.log('Now you see me.')
            console.log(`this is newValue: ${newValue.toString()}`)
        })
    </script>
</body>

Vue组件基础

组件是可复用的Vue实例,可以用Vue.component(str:string,{}:object)函数来声明一个组件,每个组件有单独的作用域,不需要写el挂载点,另外需要注意声明一定要在写在实例前面

<body>
    <div id="app">
    <button-counter></button-counter>
    <button-counter></button-counter>//组件复用
    <button-counter></button-counter>//组件复用
    </div>

    <script type="text/javascript">
    // 定义一个名为 button-counter 的新组件
    Vue.component('button-counter', {
        data: function() {
            return {
                count: 0
            }
        },
        template: '<button v-on:click="count++">You clicked me {{ count }} times.</button>'
    })

    new Vue({
        el: '#app'
    })
    </script>
</body>

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值