• Vue的模板语法


     基本语法

    <body>
    <script src="vue.js"></script>
    <div id="app">
        {{ msg }}
        <div v-html='html'>
        <input type="button" value="改变" @click="fc">
        <div class="box" :class="{active:is_ok}" :class="['active']"></div>
    </div>
    <script>
        new Vue({
            el: '#app',
            data: {
                html:"<p>hello</p>",
                msg: 'hello',
                is_ok: false
            },
            methods: {
                fc: function () {
                    this.msg = 'ssss'
    
                }
            }
        })
    </script>

    v-text相当于innerText

    v-html相当于innerHTML

    v-if vs v-show
    v-if 是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。

    v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。

    相比之下,v-show 就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 进行切换。

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

    <h1 v-if="age>15">{{ age }}</h1>
    <h2 v-else-if="age<15">二标签</h2>
    <h3 v-else>三标签</h3>


    <div v-show='true'>
    <h1>1111</h1>
    </div>

    v-bind可以绑定标签中任何属性          v-bind:src 等价于 :src

    v-on 可以监听 js中所有事件                        v-on:click 等价于 @click

    class 两种绑定方式:

    1. :class="{active:is_ok}"

    2. :class="['active']"

    三元运算符

    <div v-bind:class="[isActive ? activeClass : '', errorClass]"></div>

     事件处理

    阻止单击事件继续传播

    <a v-on:click.stop="fun"></a>

    提交时间不在重载页面

    <form v-on:submit.prevent="onSubmit"></form>

    串联

    <a v-on:click.stop.prevent="fun"></a>

     循环
    <ul>
    <li v-for="(list,index) in list_all">
    {{ index+1 }}--{{ list }}
    </li>
    </ul>

    表单输入绑定(用v-model)

    <input type="text" v-model="username">
    <textarea v-model="info"></textarea>

    单选框绑定

    {{ xb }}
    <input type="radio" value="0" name="gender" v-model="xb">男
    <input type="radio" value="1" name="gender" v-model="xb">女
    多选框
    <input type="checkbox" value="study" name="gender" v-model="xb">学习
    <input type="checkbox" value="practice" name="gender" v-model="xb">练习
    xb: []
     
    <select v-model="xb">
    <option value="0">bbb</option>
    <option value="1">jjj</option>
    <option value="2">sss</option>
    <option value="3">hhh</option>
    </select>

    计算属性和监听属性

    计算(vue推荐方法)
    computed: {
    fnc() {
    return this.msg.split('').reverse().join('')
    }
    }
    监听:
    computed: {
        fnc() {
    return this.msg.split('').reverse().join('')
    }
    },
    watch: {
    msg:function(newVal, oldVal) {
    alert(newVal + ' ' + oldVal)
    }
    }

     过滤器

    <div id="app">
    {{ price | US | Yuan }}
    </div>
    <script>
    //全局
    Vue.filter('Yuan', function (value) {
    if (value == '') {
    return
    }
    return value + '美元'
    })
    //内部
    var vue = new Vue({
    el: "#app",
    data: {
    price: 99.9
    },
    filters: {
    US: function (value) {
    return '$' + value
    }
    }
    })

    </script>

     axios(ajax)

    var demo = new Vue({
    el: "#app",
    data: {
    list_data: [],
    list: [1, 2, 3, 4]
    },
    mounted: function () {
    axios({
    method: 'get',
    url: '/1',
    }).then(
    //function (dat) {
    //demo.list_data = dat.data
    // }
    dat => {
    this.list_data = dat.data
    }

    ).catch(function (error) {
    console.log(error)

    })
    }
    })
     组件-基础 (面包屑导航)
     <style>
    .crumb {
    90%;
    line-height: 50px;
    margin: 0px auto;
    border-bottom: 1px solid #ddd;
    }
    </style>


    <body>
    <div id="app">
    <breadcrumb></breadcrumb>
    </div>

    <script>
    Vue.component('breadcrumb', {
    template: '<div class="crumb">当前位置是:首页&gt;新闻列表</div>'

    })


    var vm = new Vue({
    el: '#app',
    })
    </script>
    组件02 
        <style>
    .crumb {
    90%;
    line-height: 50px;
    margin: 0px auto;
    border-bottom: 1px solid #ddd;
    }

    .hot {
    color: red;
    font-weight: bold;
    text-indent: 10px;
    }
    </style>

    <body>
    <div id="app">
    <breadcrumb pos="首页>新闻"></breadcrumb>
    </div>

    <script>
    Vue.component('breadcrumb', {
    props: ['pos'],
    template: '<div :class="{crumb:true,hot:isHot}" @click="isHot=!isHot">{{ pos }}</div>',
    // 独立的数据function(){return{name:'aa'}} 共享数据 : data:{}
    data: function () {
    return {
    isHot: true,

    }
    }
    })


    var vm = new Vue({
    el: '#app',
    })
    </script>

    vue 跨域解决方法

    dev: {
    
        // Paths
        assetsSubDirectory: 'static',
        assetsPublicPath: '/',
        proxyTable: {
          '/api': {
            target: 'http://localhost:7001',//后端接口地址
            changeOrigin: true,//是否允许跨越
            pathRewrite: {
              '^/apis': '',//重写,
            }
          }
        },
     
     
  • 相关阅读:
    poj 3026 Borg Maze
    poj2828 Buy Tickets
    poj3264 Balanced Lineup
    高精度运算
    poj1035 Spell checker
    poj2318 TOYS 点积叉积理解
    求两直线交点的一般做法
    C语言I博客作业05
    C语言I博客作业04
    C语言I博客作业07
  • 原文地址:https://www.cnblogs.com/ls1997/p/10692682.html
Copyright © 2020-2023  润新知