vue基础

作者: web前端攻城狮 | 来源:发表于2019-03-31 20:06 被阅读0次

    模版语法

    文本(输出变量)

    <span>Message:{{msg}}

    原始HTML(输出html标签)

    <span v-html="rawHtml"></span>

    特性(添加变量id名)

    <div :id="dynamicId"></div>

    表达式(必须是一句话,且必须有返回值)
    {{number+1}}
    {{ok?'yse':'no'}}
    {{message.split('').reverse().join('')}}
    
    指令

    <p v-if="seen">现咋子你看到我了</p>

    修饰符(prevent阻止默认行为,如跳转)

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

    缩写
    <a v-bind:href="url">...</a>
    <a :href="url">...</a>
    -------------------------------------
    <a v-on:click="doSomething">...</a>
    <a @click="doSomething">...</a>
    
    自定义指令

    1.新建n.js

    import Vue from 'vue'
    Vue.directive('n',{
      bind:function(el,binding){
        el.textContent = Math.pow(binding.value,2)
      },
    update:function(el,binding){
        el.textContent = Math.pow(binding.value,2)
      }
    })
    

    2.需要使用的地方在<script>引进
    import ./components/n
    <div v-n="3"></div>

    计算属性

    基础示例
    <div>
      我借你{{money}},你还我{{a}},还剩{{b}}
    </div>
    
    data(){
      return {
        money:1000,
        a:10
      }
    },
    computed:{
      b:function(){
        return this.moey-this.a
      }
    }
    

    如果money或者a发生变化,b的这个计算属性会自动更新
    应用场景-具有依赖关系的数据监听

    类与样式

    对象语法

    适合较多的class名或者动态的class

    数组语法

    适合较少的class名

    <div :class="[a1,a2]"></div>  //渲染出来就是同时有2个类名
    <div :class="{'test-1':a3}"></div>  //如果为false就隐藏
    <div :class="obj"></div>   //这种可以动态的修改
    
    data(){
      return{
        a1:'test-1',
        a2:'test-2',
        a3:false,
        obj:{
          'test-1':false
        }
      }
    }
    

    条件&列表渲染

    基础用法

    if else、for的模版处理方式

    <ul>
      <li v-for="item in list" :key="item">
      <li v-for="(item,idx) in list" :key="item"> //加了索引
        {{item}}
      </li>   
      //item是自己随便定义的,对应数组里面的值
    </ul>
    
    data(){
      return {
        list:['a','b','c','d']
      }
    }
    
    
    分组用法

    复杂模版的分组条件处理的方式 (比如给a,b,c后面加个分割线)

    <ul>
       <template  v-for="item in list">
        <li :key="item+1">hello</li>
        <li :key="item">{{item}}</li> 
      </template>
    </ul>
    //在每一条循环的语句中,加上一hello
    //每次循环遍历都要执行这一块,这就叫分组
    data(){
      return {
        list:['a','b','c','d']
      }
    }
    
    

    事件处理

    定义&缩写

    事件的定义及缩写

    内联写法

    事件传参和事件对象

    <button v-on:click="msg">test</button> //函数名称一定要在methods方法中定义
    methods:{
      msg:function(){
        console.log(123)
      }
    }
    -----------------------------------------
    <button @click="counter+1">test</button>
    data:(){
      return{
        counter:0
      }
    }
    -----------------------------------------
    <button @click="msg('s',$event)">test</button>
    methods:{
      msg:function(a,b){
        console.log(a)
        console.log(b) //打印到当前的事件对象
      }
    }
    
    事件修饰符

    快速结合键盘事件提升效率

    .stop
    .prevent
    .capture
    .self
    .once
    .passive
    
    <!-- 阻止单击事件继续传播 -->
    <a v-on:click.stop="doThis"></a>
    
    <!-- 提交事件不再重载页面 -->
    <form v-on:submit.prevent="onSubmit"></form>
    
    <!-- 修饰符可以串联 -->
    <a v-on:click.stop.prevent="doThat"></a>
    
    <!-- 只有修饰符 -->
    <form v-on:submit.prevent></form>
    
    <!-- 添加事件监听器时使用事件捕获模式 -->
    <!-- 即元素自身触发的事件先在此处理,然后才交由内部元素进行处理 -->
    <div v-on:click.capture="doThis">...</div>
    
    <!-- 只当在 event.target 是当前元素自身时触发处理函数 -->
    <!-- 即事件不是从内部元素触发的 -->
    <div v-on:click.self="doThat">...</div>
    

    还有按键修饰符,系统修饰符,鼠标按钮修饰符

    深入了解组件

    props

    组建的参数传递(父组件向子组件传递,子组件接收就是靠props)

    父组件App.vue
    <template>
      <com :age="age" />//这是动态的
      <com age="19" />//这是静态的
    </template>
    <script>
      import com from './components/com.vue'
      export default{
        components:{
          com
        },
        data(){
          return {
            age:'18'
          }
        }
      }
    </script>
    子组件com.vue通过
    props:['age'] //接收
    模版就可以输出{{age}}
    
    slot

    插槽在组件抽象设计中的应用(定义好了,插槽,留一个位置 )

    //App.vue文件
    <com :age="ages" @patch="msg">
      <h1 slot="a">我要加东西2</h1>
    </com>
    
    //com.vue
    <template>
      ....
      <slot name="a"></slot>
    </template>
    
    
    

    就是动态往子组件里面塞了东西,子组件本身没这个东西,是父组件这边添加的,就可以动态显示和隐藏东西的作用,可以让组件更加灵活,把组件无限的抽象

    自定义事件

    父子组建的通信方式(子组件向父组件传递,就要靠自定义事件触发)

    //子组件com.vue
    <button @click="$emit('patch')">发送到父组件</button>
    //父组件App.vue
    <com @patch="msg" />
    
    import com from './components/com.vue'
    
    methods:{
      msg:function(){
        console.log('msg')
      }
    }
    

    如果跨组件通信,就要用到vuex

    路由基础

    vue-router基础
    必备三步
    安装vue-router
    新建router.js和main.js平级
    import Vue from 'vue'
    import VueRouter from 'vue-router'
    Vue.use(VueRouter)
    
    import pageA from './pages/a.vue'
    import pageB from './pages/b.vue'
    
    const routes = [
      {
        path:'/pagea',
        component:pageA
      },
      {
        path:'/pageb',
        component:pageB
      },
    ]
    
    const router = new VueRouter({
      routes //经过VueRouter实例化
    })
    //把这个对象导出
    export default router
    
    -------------------------------------
    还要在main.js中关联起来
    import router from './router'
    
    new Vue({
      router
    }).$mount('#app')
    

    创建vue.config.js
    在脚手架官网搜索runtime

    module.exports = {
      runtimeCompiler:true
    }
    
    还要在App.vue文件中插入这个节点才可以显示,默认页面是/,需要在path:"/'配置一下
    <div id="app">
      <router-view></router-view> //其实就是路由切换就替换这里的组件
    </div>
    

    如果是默认安装好,安装路由会出错,需要配置一下

    router-link传参数
    <router-link :to="{name:'user',params:{userId:123}}">User</router-link>
    

    Vuex基础

    image.png

    流程图解析
    1.vue模版可以Render一个数据
    2.vue模版可以接受用户的交互行为,来触发这个Dispatch
    3.Actions去做提交Commit找到这个对应的这个数据交互内容,对这个数据进行改版
    4.最后使State数据改变
    5.Vue.Components数据进行更新

    State是数据的来源
    Mutations是提供操作数据(如何改变)
    Actions什么时候去做这个改变数据行为

    如果使用

    1.安装npm i vuex
    2.新建store.js和main.js同级

    import Vue from 'vue'
    import Vuex from 'vuex'
    
    Vue.use(Vuex)
    
    const state = {
      count:1
    }
    const mutations = {
      increment(state){
        state.count++
      },
      decrement(state){
        state.count--
      }
    } 
    
    const actions = {
      increment:({commit}=>{
        commit('increment')
      }),
      decrement:({commit}=>{
        commit('decrement')
      })
    }
    
    export default new Vuex.Store({
      state,
      mutations,
      actions
    })
    
    ---------------------------------
    然后main.js需要
    import store from './store'
    new Vue({
      store
    }).$mount('#app')
    

    传参数的写法


    image.png
    image.png

    相关文章

      网友评论

          本文标题:vue基础

          本文链接:https://www.haomeiwen.com/subject/syjybqtx.html