npm install
npm run serve
npm run build
npm run lint
v-for="(item, idex) of list " item 值 index 索引值 (in of) v-model v-on:click 绑定方法 v-bind: 绑定数据 v-if="" v-show="" 区别fasle dome不存在
v-show 隐藏 dom依旧存在 v-else紧贴v-if一起写 v-else-if
{{ 插值 }}
父传子 v-bind:model 接受 props:['props']
$emit vue 子传父 通过事件传递
钩子函数
计算属性 computed 缓存 计算属性的 setter (set ) 和 getter (get )
侦听属性 watch
vue中样式绑定 v-bind:class = '{}或者[]' 对象和数组绑定 (三目运算) v-bind:style
push pop shift unshift splice sort reverse 1 操作数组 变异方法 2 改变数据的引用
vue中的set方法 数组[] 对象{} set方法 实例上的方法 vm.$set 例: vue.set(vm.userInfo,"address","beijing")
实例上的set vm.$set
- 4-1
-
- is属性 组件 符合h5规范的嵌套
-
- 其他子组件时 data: function(){} 必须是个函数
-
- ref = "引用的名字" 引用 this.$refs.hello // 所有引用 获取dom节点 在子组件上 获取子组件的应用
-
- $emit 监听事件
父传子
属性方式
<counter :count="1"></counter>
<counter :count="1"></counter>
props:['count'],
data: function(){
return(){
number: this.count
}
}
template: '<div>{{ count }}</div>'
单项数据流 父组件传递过来的内容 不可以直接修改
子传父
<counter :count="1" @change="handleIncrase"></counter>
<counter :count="1"></counter>
<div> {{ total }} </div>
var counter = {
methods:{
handleClikc: function(){
this.number = this.number +2;
this.$emit('change',2) //监听事件
}
}
}
var vm = new Vue({
el: '#root',
data: {
total: 5
},
components:{
counter: counter
},
methods: {
handleIncrase: function(step){
this.total += stop
}
}
})
<div id = "root">
<child content="hello world"></child>
</div>
<script>
Vue.component('child',{
props:{
content: [ nuber,string ] 或者 {
type:string,
required: true, //是否必传
default: "default value" // required 是false 并且 未传递参数 默认就显示default内容
validator: function(value){ //自定义校验器
return (value.length>5) //要求长度必须大于5
}
} //传参数的约束
},
template: '<div>{{ content }}</div>'
})
var vm = new Vue({
el: '#root'
});
非Props特性
父传子不接 子不可用 传递内容默认显示最外层dom上
</script>
@click.native 监听原生事件 // native
<div id = "root">
<child @click.native=""handleClick></child>
</div>
<script>
Vue.component('child',{
template: '<div @click="handleChildclick">{{ content }}>Click</div>',
methods:{
handleChildClick: function(){
alert('child click')
this.$emit('click') //向外出触发
}
}
})
var vm = new Vue({
el: '#root',
methods: {
handleClick: function(){
alert('click')
}
}
});
</script>
- vuex
- 总线机制
总线机制
<div>
<child content ="dell"></child>
<child content ="lee"></child>
</div>
<script>
Vue.prototype.bus = new Vue(); // 给Vue实例 绑定 Bus模式
Vue.component('child',{
data: function(){
return{
selfContent: this.content
}
}
props:{
content: String
},
template: '<div @click="handleClick">{{ content }}</div>',
methods:{
handleClick: function(){
this.bus.$emit('change',this.content) // 绑定监听事件
}
},
mounted: function(){
var this_ = this // this作用域变化 保存this值
this.bus.$on('change',function(msg){ //触发事件 监听事件
this_.content = msg //兄弟之间相互传值
})
}
});
var vm = new Vue({
el: '#root'
})
</script>
//插槽的使用场景
<div>
<child>
<p slot= 'header'>Dell</p> //插槽 传递dom 2具名插槽
</child>
</div>
<script>
Vue.component('child',{
template: `<div>
<slot>默认内容</slot>
<slot name = 'header'>默认内容</slot>
</div>`,
});
var vm = new Vue({
el: '#root'
})
</script>
// 作用域插槽
<div>
<child>
<child>
<template slot-scope = "props"> //作用域插槽 必须以template开头和结尾的标签
<li>{{ props.item }}--item</li>
</template>
</child>
</child>
</div>
<script>
Vue.component('child',{
data: function(){
return: {
list: [1,2,3,4]
}
}
template: `<div>
<ul>
<slot v-for= "item of list" :item= "item" >
</slot>
</ul>
</div>`,
});
var vm = new Vue({
el: '#root'
})
</script>
<child-one v-if = "type=== 'child-one'"></child-one> //v-once 只存放内存一次降低内存消耗
<div id="root">
<component :is="type"></component> //动态组件
<!-- <child-one v-if = "type=== 'child-one'"></child-one>
<child-two v-if = "type=== 'child-two'"></child-two> -->
<button @click="handleBtn">change</button>
</div>
<script>
Vue.component("child-one",{
template: '<div>child-one</div>'
})
Vue.component("child-two",{
template: '<div>child-two</div>'
})
var vm = new Vue({
el: '#root',
data: {
type:'child-one'
},
methods:{
handleBtnClick: function(){
this.type = this.type === "child-one"?"child-two": "child-one"
}
}
})
</script>
<div id="root">
<transition name="fade"
enter-active-class="animated swing" //动画引入 自定义使用
>
<div v-if= "show">hello world</div>
</transition>
<button @click= "handleClick">切换</button>
</div>
<script>
var vm = new Vue({
el: '#root'
})
</script>
<transition name="fade"
enter-active-class="animated swing" //动画引入 自定义使用
>
<div v-if= "show">hello world</div>
</transition>
<transition name="fade"
:duration="{ enter: 5000, leave: 10000}" // 时长
name="fade"
appear
enter-active-class="animated swing" //动画引入 自定义使用
leave-active-class="animated shake fade-leave-active"
>
<div v-if= "show">hello world</div>
</transition>
<transition name="fade"
:duration="{ enter: 5000, leave: 10000}" // 时长
name="fade"
appear
enter-active-class="animated swing" //动画引入 自定义使用
leave-active-class="animated shake fade-leave-active"
>
<div v-if= "show">hello world</div>
</transition>
<style>
</style>
<transition mode="out-in" >
<component :is="type"></component>
<!-- <div v-if= "show" key= "hello">hello world</div>
<div v-else=>bye world</div> -->
</transition>
<button @click="handleClick">toggle</button>
<style>
.v-enter, .v-leave-to{
opacity: 0;
}
.v-enter-active, .v-leave-active{
transition: opacity 1s;
}
</style>
<div id="root">
<transition-grop>
<div v-for="(item,index) of list" :key="index">
{{ item.title }}
</div>
</transition-grop>
<button @click= "handleBtnClick">Add</button>
</div>
<script>
var vm = new Vue({
el: "#root",
data: {
list: []
},
methods:{
handleBtnClick: function(){
this.list.push({
id: count++,
thitle: "hello world"
})
}
}
})
</script>
<div id="root">
<transition-grop>
<div v-for="(item,index) of list" :key="index">
{{ item.title }}
</div>
</transition-grop>
<button @click= "handleBtnClick">Add</button>
</div>
<script>
var vm = new Vue({
el: "#root",
data: {
list: []
},
methods:{
handleBtnClick: function(){
this.list.push({
id: count++,
thitle: "hello world"
})
}
}
})
</script>
-
命令行
-
生成 sshkey ssh-keygen -t rsa -C "xxxxx@xxxxx.com" 回车三次完成生成 ssh key
-
获取到你的 public key cat ~/.ssh/id_rsa.pub
- 安装 npm install -g @vue/cli 或者 yarn global add @vue/cli
- 创建项目 vue create my-project or vue ui
- 多页应用 页面跳转
- 优点:首屏时间块,seo效果好
- 缺点:页面切换慢
+ 单页应用 + 优点:页面切换块 + 缺点:首屏的时间稍慢,seo差 #### 首页header区域开发
// npm install axios
//支持链式操作
axios.get('/user?ID=12345')
.then(function (response) { // .then 请求成功时的操作 执行成功函数
console.log(response);
})
.catch(function (error) { // .catch 请求失败后的操作 函数
console.log(error);
});
1,在根目录下创建 vue-config.js 文件
const mockdata = require('./static/mock/index.json'); // 导入静态文件 及模拟的数据
module.exports={ // 导出 外界能够访问
devServer: {
port:8080, //启动的端口这里是改动后的 未改动前默认 8080
before(app){
app.get('/static/mock',(req,res,next)=>{ // 匹配访问地址 这里是基于Node.js app express框架
res.json(mockdata); // 响应请求 输出 传递
})
}
}
}
better-scroll 第三方插件 npm install better-scroll better-scroll 是一款重点解决移动端(现已支持 PC 端)各种滚动场景需求的插件。它的核心是借鉴的 iscroll 的实现,它的 API 设计基本兼容 iscroll,在 iscroll 的基础上又扩展了一些 feature 以及做了一些性能优化。better-scroll 是基于原生 JS 实现的,不依赖任何框架。它编译后的代码大小是 63kb,压缩后是 35kb,gzip 后仅有 9kb,是一款非常轻量的 JS lib。
- git pull 更新
- git checkout 分支名 //切换到分支
- git checkout master 切换到主枝干
- git merge origin/index-swiper 新增的内容分支合并到本地分支 //注意合并之前先 push到云端 不易造成混乱