自学Vue第二天

第二天

选项对象

<div id="app">
    <p v-on:click="clickHandle">{{ message }}</p>
</div>
<script>
    const vm = new Vue({
        el: '#app', // 挂载点
        data: { // 咱们的数据 这里是和模板发生关系的地方
            message: 'hi Vue'
        },
        methods: {
            clickHandle () {
                alert('hello, Vue!')
            }
        }
    })
</script>

methods反转字符串

<div id="app">
    <p>{{ message }}</p>
    <button v-on:click="reverseMessage">反转字符串</button>
</div>
<script>
    new Vue({
        el: '#app',
        data: {
            message: 'hello, Vue!'
        },
        methods: {
            reverseMessage () {
                // console.log(this.message.split(''))
                this.message  = this.message.split('').reverse().join('')
            }
        }

    })
</script>

{{}}只能使用表达式

<div id="app">
<!--    <p>{{ if(flag) { 'yes' } else { 'no' } }}</p>-->
    <p>{{ flag ? 'yes' : 'no' }}</p>
    <!-- {{ 只能使用JS表达式,不能使用JS语句 }} -->
</div>
<script>
    const vm = new Vue({
        el: '#app', // 挂载点
        data: { // 咱们的数据 这里是和模板发生关系的地方
            flag: false
        }
    })

    // if(flag) {
    //
    // } else {
    //
    // }
    // let a = 1;
    // let b = 2
    // console.log(a + b) //
</script>

v-html

<div id="app">
    <p v-html="message"></p>
</div>
<script>
    const vm = new Vue({
        el: '#app', // 挂载点
        data: { // 咱们的数据 这里是和模板发生关系的地方
            message: '<p style="text-align: center;">\n' +
                '    <strong><em>hello 1902B</em></strong>\n' +
                '</p>'
        }
    })
</script>

v-if VS v-show

基本差别

v-if动态创建标签,如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。
v-show通过css中的display来动态控制显示或隐藏,不管初始条件是什么,元素总是会被渲染
使用场景

一般来说,v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好。
v-show一般会用在切换比较频繁
v-if切换不频繁的
v-if 、 v-else 、 v-else-if

template包裹元素,不会出现在DOM结构中

   <div id="app">
        <template v-if="seen">
            <p>AAA</p>
            <p>AAA</p>
            <p>AAA</p>
        </template>
    </div>
    <script>
        const vm = new Vue({
            el: '#app', // 挂载点
            data: { // 咱们的数据 这里是和模板发生关系的地方
                seen: true
            }
        })
    </script>

v-for ☆

遍历数组

<div id="app">
    <ol>
        <li v-for="item in todos">{{ item.text }}</li>
    </ol>
</div>
<script>
    const vm = new Vue({
        el: '#app', // 挂载点
        data: { // 咱们的数据 这里是和模板发生关系的地方
            todos: [
                {
                    text: 'JavaScript'
                },
                {
                    text: 'React'
                },
                {
                    text: 'Vue2.0'
                }
            ]
        }
    })
</script>

遍历对象

<div id="app">
    <ol>
        <li v-for="value in obj">{{ value }}</li>
    </ol>
</div>
<script>
    const vm = new Vue({
        el: '#app', // 挂载点
        data: { // 咱们的数据 这里是和模板发生关系的地方
           obj: {
               firstName: '二师兄',
               lastName: '猪八戒',
               age: '咱也不知道'
           }
        }
    })
</script>

v-if VS v-for

v-for的优先级高于v-if 和 v-show

<div id="app">
    <ol>
        <li v-for="item in arr" v-if="item.flag">{{ item.title }}</li>
    </ol>
</div>
<script>
    const vm = new Vue({
        el: '#app', // 挂载点
        data: { // 咱们的数据 这里是和模板发生关系的地方
           arr: [
               {
                   title: '熊大',
                   flag: true
               },
               {
                   title: '熊二',
                   flag: true
               },
               {
                   title: '强哥',
                   flag: false
               }
           ]
        }
    })
</script>

v-class

v-bind:class 指令也可以与普通的 class 属性共存

<div id="app">
    <span class="fontSize" v-bind:class="{ red: addClass }">hello, Vue</span>
</div>
<script>
    const vm = new Vue({
        el: '#app', // 挂载点
        data: { // 咱们的数据 这里是和模板发生关系的地方
           addClass: true
        }
    })
</script>

v-bind:style

<div id="app">
    <span v-bind:style="styleObj">hello, Vue</span>
</div>
<script>
    const vm = new Vue({
        el: '#app', // 挂载点
        data: { // 咱们的数据 这里是和模板发生关系的地方
           styleObj: {
               color: 'red',
               fontSize: '100px'
           }
        }
    })
</script>

过滤器

本地(局部)过滤器

<div id="app">
    <p>{{ msg | firstUpper }}</p>
</div>
<script>
    new Vue({
        el: '#app',
        data: {
           msg: 'abc'
        },
        // 定义局部过滤器
        filters: {
            firstUpper(val) {
                return val.charAt(0).toUpperCase() + val.slice(1)
            }
        }
    })
</script>

全局过滤器

<div id="app">
    <p>{{ msg | firstUpper }}</p>
</div>
<script>
    // 全局过滤器
    Vue.filter('firstUpper', val => {
        return val.charAt(0).toUpperCase() + val.slice(1)
    })
    new Vue({
        el: '#app',
        data: {
           msg: 'abc'
        }
    })
</script>

过滤器传参

<div id="app">
    <p>{{ msg | firstUpper('1') }}</p>
</div>
<script>
    // 全局过滤器
    Vue.filter('firstUpper', (val, index) => {
        return val.slice(0, index) + val.charAt(index).toUpperCase() + val.slice(Number(index) + 1)
    })
    new Vue({
        el: '#app',
        data: {
           msg: 'abc'
        }
    })
</script>

过滤器的串联

<div id="app">
    <p>{{ msg | firstUpper('1') | connect }}</p>
</div>
<script>
    // 全局过滤器
    Vue.filter('firstUpper', (val, index) => {
        return val.slice(0, index) + val.charAt(index).toUpperCase() + val.slice(Number(index) + 1)
    })
    Vue.filter('connect', val => {
        return val.split('').join('-')
    })
    new Vue({
        el: '#app',
        data: {
           msg: 'abc'
        }
    })
</script>

作业

商品分类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值