vue基础

模版语法

文本(输出变量)

<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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • 每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的: 实例生命周期钩子 每个 Vue 实例...
    Timmy小石匠阅读 1,371评论 0 11
  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 5,044评论 0 29
  • Vue.js - Day1 课程介绍 前5天: 都在学习Vue基本的语法和概念;打包工具 Webpack , Gu...
    折枝赠远方阅读 306评论 0 0
  • 目录 课时01🍡安装渲染——声明式文本插值元素属性条件指令循环指令事件监听双向绑定组件应用定义使用渲染 课时02🍡...
    一点金光阅读 217评论 0 0
  • 正如年轻的我们,小时候做梦都想长大的我们,长大意味着家长不用随时随地都想管着我们,我们不用被无穷无尽的作...
    娇娇小可阅读 235评论 2 2