bower 前端包管理器
bower install vue#1.0.28包名 安装
bower uninstall包名 卸载
bower info 查看包的相关信息css
import 组件名 from 组件路径
import 直接文件路径html
-------------------------------------------前端
本质走的是css3的transition,animation
<div id="div1" v-show="bSign" transition="fade"vue
<style>
.fade-transition {
transition:1s all ease;
}
.fade-enter{opacity:0}
.fade-leave{opacity:0}
</style>
----------------------------------------------
animate.css 和 vue结合作动画node
--------------------------------------
new Vue({
transitions:{
bounce:{
enterClass:'zoomInLeft',
leaveClass:'zoomOutRight'
}
}jquery
})webpack
-----------------------------------------css3
组件一个大的对象;
定义组件:
1.全局组件;
组件里面想要放数据:
data必须是函数的形式,函数必须返回一个对象json
var Aaa=Vue.extend({
data() {
return {
msg:'我是标题';
}git
},
methods:{
change() {
this.msg='changed'
}
}
template:'<h3 @click="change">{{msg}}</h3>'
});
var a=new Aaa();
Vue.componet('aaa',Aaa);es6
2.局部组件
放到某个组件内部
var vm= new Vue({
el:'#box',
components:{//局部组件
'my-aaa',{
template:'<h2>good</h2>'
}
}
})
-------------------------------------------
另外一种编写组件的方式:
Vue.component('my-aaa',{
template:'<h2>good</h2>'
});
----------------------------------
配合模板:
1.template:
2.d单独放到某个地方
a)
<script type='x-template' id="aaa">
<h2 @click="change">{{msg}}</h2>
</script>
b) <template id='aaa'>
</template>
-------------------------------------------
动态组件:
<component :is="a"></component>
其中a是组件
------------------------------------------
组件的嵌套:
vue-devtools 调试工具
vue默认状况下,子组件没法访问父组件的数据;
------------------------------------
1.子组件就想获取父组件的data
在调用子组件:
子组件以内:props:['m','myMsg']
props:{
'm':String,
'myMsg':Number
}
<template id='aaa'>
<bbb :msg='msg2' :my-msg='msg2'></bbb> :m自定义属性
</template>
components:{
'bbb':{
propS:['msg','myMsg'],
template:'<h3>我是子组件-->{{msg}}<br/>{{myMsg}}</h3>'
}
}
-----------------------------------------
父组件获取子组件数据,
子组件把本身的数据,发送到父组件,
vm.$emit(数据名称(事件名称),数据)
this.$emit('child-msg',this.a);
父组件接收子组件数据:
v-on
@child-msg=“get”
---------------------------------------------
vm.$dispatch(事件名,数据) 子级向父级发送数据
vm.$broadcast(事件名,数据) 父级向子级广播数据
配合:events{}
var vm=new Vue({
el:'#box',
events:{
}
})
在vue2.0已淘汰;
-------------------------------------------
位置,槽口
占位置,当组件里面有一些特定的布局不想被覆盖时,用slot占位置
<ul slot="ul-slot"><li>sdfsd</li></ul>
<slot name='ul-slot'></slot>
--------------------------------------------
单页面应用,路由
根据不一样的url地址,出现不一样的效果
v-link="{path:'/home'}" v-link指令 跳转连接
坑 <router-view>展现内容</router-view>
//1.准备一个根组件
var App=Vue.extend();
//2.Home News组件
var Home=Vue.extend({
template:‘我是主页’;
});
//3.准备路由:
var router=new VueRouter();
//4.关联
router.map({
'home':{component:Home},
'news':{component:News}
})
//5.启动路由
router.start(App,'#box')
//6.跳转:
router.redirect({
'/aaa':'/home'
})
----------------------------------
默认增长:class="v-link-active"
能够增长active时的样式
子组件 subRoutes:{
}
'home':{
component:Home,
subRoutes:{
'login':{
component:{
template:'<strong>我是登陆信息</strong>'
}
},
'reg':{
component:{
template:'<strong>我是注册信息</strong>'
}
}
}
},
----------------------------------------
[object Object] 对象 用json过滤
/detail/:id/age/:age :冒号用来标志当前参数
{{$route.parmas |json}} --->parmas获得当前参数的值,有几个获得几个
$route.parmas 当前参数
$route.path 当前路径
{{$route.query |json}} 当前路由的数据
---------------------------------------------
vue-loader:
style-loader
css-loader
url-loader
html-loader
后台: nodejs -->require exports
broserify 模块加载器,只能加载js
webpack 模块加载器,最后打包到一块儿
vue-loader 基于webpack
.vue文件:
放置vue组件的代码:
<template>
html
</template>
<style>
css
</style>
<script>
js es6
</script>
babel-loader 把es6代码编译成es5代码
-----------------------------------------
webpack.config.js webpack的配置文件
main.js 入口文件
index.html
App.vue vue文件 官方推荐A大写
package.json 工程文件(项目依赖,名称,配置)
npm init --yes
----------------------------
导出模块:
export default {}
引入模块
import 模块 from 地址
-------------------------------------
npm install webpack --save-dev
不只下载到本地,并且添加到package.json中的devdependices中
npm install webpack-dev-server --save-dev
webpack-dev-server --inline --hot --port 8082
热加载,不刷新
cnpm install vue-loader@8.5.4 --save-dev
errnoExceprion
EADDRINUSE 端口被占用
cnpm install vue-html-loader --save-dev
clear
css-loader vue-style-loader
vue-hot-reload-api 验证代码中的错误
exclude:/node_modules/
babel:{
presets:['es2015'],
plugins:['transform-runtime']
}
用babel编译所需的loader(es6语法所需)
babel-loader
babel-core
babel-plugin-transform-runtime
babel-preset-es2015
babel-runtime
-------------------------------------
最核心:
cnpm install vue@1.0.28 --save
------------------------------
1.cmpm install
2.npm run dev
package.json
"script":{"dev":--------------}
<style scope>局部的style
"build":"webpack -p" 打包并压缩
上线:npm run build
--------------------------------------
vue-cli----vue 脚手架
vue已经提供好了基本项目结构
自己集成了不少项目模板:
simple
webpack
(多) ESlint 检查代码规范,统一代码风格
(多) 单元测试
webpack-simple
browserify
browserify-simple
-------------------------------------
1.npm install vue-cli -g 安装vue命令环境
veu -v
2. vue init <模板名> 文件夹名 生成项目模板
3.进入生成目录
npm install
npm run dev
cls
------------------------------------
vue init webpack-simple#1.0 vue-webpack-simple-demo
在vue中不建议直接改,存一下再改,由于vue要通知视图;
-----------------------------------------
2.0以后的变化:
1.在每一个组件模板中,不支持片断代码:
关于组件模板,必须有根元素包裹组件的代码;
1) Vue.extend 能够用,废弃
2) Vue.conponent(组件名称,{ 也能够用不推荐
data(){},
methods:{},
template:
})
3) var Home={ //2.0
template:""
}
2.0
beforeCreate 组件实例刚刚被建立,属性都尚未
Created 实例已经建立完成,属性已绑定,Dom没有绑定
beforeMount 模板编译以前,
mounted 模板编译完成 代替以前compiled和ready
beforeUpdate 组件数据更新以前
updata 组件数据更新完毕
beforeDestroy 组件销毁以前、
2.0里面默承认以添加剧复的数据
在2.0去掉了一些隐士的变量
v-for="(val,index) in list"
arr.forEach(function(val,index){})
变成
<li v-for="(val,index) in list" :key="index">
---------------------------------------------
Vue.config.keyCodes.ctrl=17;
以前系统自带不少过滤器
2.0全部内置的过滤器所有删除
lodash 工具库
在2.0中json是直接转的
一小点变化,传参用()
Vue.filter("过滤器名",function(){})
-------------------------------------------
vm.$emit();
vm.$on();
子组件已经不容许给 父组件直接更改数据了
a) 父组件每次传一个对象给子组件,对象之间引用
b) 子组件先定义一个空的对象的变量,来接收从父组件传过来的值如b:'',
而后在子组件中在mounted()中转一下,用this.b=this.msg;
而后添加事件改变时只改变this.b的内容,父组件的msg不受影响
------------------------------------------
var Event= vew Vue();
Event.$emit(事件名称,数据)
Event.$on(事件名称,function(data){
}.bind(this))
-------------------------------------------
debounce 废弃
---》lodash 用
_.debounce(fn,time)
---------------------------------------------
vue路由
transition 以前属性
到了 2.0以后,transition组件
<transition name="fade" @before-enter="beforeEnter">
函数方法:
@before-enter="beforeEnter" 进入动画enter以前
@enter=“enter” 动画enter进入
@afterEnter="afterEnter" 动画进入以后
@before-leave="beforeLeave" 动画leave以前
@leave="leave" 动画leave
@after-leave="afterLeave" 动画leave离开以前
每一个方法都有本身的el,属于本身的!!!
methods:{
beforeEnter(el){
console.log('动画enter以前');
el:这里的el是表明元素自己
}
}
运动的东西(元素,属性,路由)
</transition>
class定义:
.fade-enter {} //初始状态
.fade-enter-active{} //当元素出来变化成什么样
.fade-leave{}
.fade-leave-active {} 当元素消失变成什么样
-------------------------------------------------】
<transition enter-active-class="bounceInLeft/zoomInleft"
leave-active-class="bounceOutRight zoomOutRight">
<p v-show="show" class="animated"></p>
加了对应的类以后必须调用class="animated"才能生效
或者直接在leave-active-class和enter-active-class中加animated;
</transition>
-----------------------------------------------------
多个元素:transition-group 而且用惟一的标志 :key=""
key里面的值通常是循环出来的
<transition-group>
<p :key="1"></p>
<p :key="2"></p>
</transition-group>
----------------------------------------------
https://router.vuejs.org/zh-cn/index.html
1.<router-link to="/home">主页</router-link>
2.展现仍是<router-view></router-view>
3.配置路由
4.生成路由实例
5.挂到vue上
重定向: {path:'*',redirect:'/home'}
.router-link-active{} 路由激活时的状态
------------------------------------------------
var User ={
template:`<div> //必须有根标签
<ul>
<li><router-link to="/user/blue/age/10"></router-link></li>
<li><router-link to="/user/red/age/60"></router-link></li>
<li><router-link to="/user/eric/age/90"></router-link></li>
</ul>
</div>
`
}
$route.parmas依然存在
children:[
{path:':username/age/:age',component:UserDetail}
]
:age
:username
获取路由的用户名和age
----------------------------------------------
挂载到vue上,这种写法能够替代el,
new Vue({
router
}).$mount("#box")
路由实例添加的方法
router.push({path:'home'}) //直接添加一个路由
本质是往历史记录里添加一条信息
router.replace({path:'news'}) 替换一个路由,不会往历史记录车里面添加
----------------------------------------------
new Vue({
el:'#app'
render:c =>c(App)
})
-------------------------------------------
import routerConfig from './router.config.js';
new Vue({
router,
el:"#app",
render:c =>c(App)
})
<style less></style>
----------------------------------------------
vue-loader和vue-router 配合
----------------------------------------------
webpack中的配置文件顺序不对的话会引起bug
{
test:/\.css$/ ,
loader:'style!css' //顺序不能反
}
-------------------------------------------
GitHub:https://github.com/ElemeFE/mint-ui
https://github.com/itstrive/striveCode/tree/js/vue2.0-Mint-ui-demo
http://mint-ui.github.io/docs/#!/zh-cn2
项目主页:http://mint-ui.github.io/#!/zh-cn
Demo:http://elemefe.github.io/mint-ui/#!/
文档:http://mint-ui.github.io/docs/#!/zh-cn
cnpm install mint-ui -D
------------------------------------------------
bootstrap twitter 开源的自适应的组件
基于jquery的,使用前先引
栅格化系统——响应式工具===》移动+pc+pad
-----------------------
饿了么:开源的基于vue的组件库
elementui pc端
MintUi 移动端
bower 前端包管理工具
npm node包管理工具
---------------------
1.在index.html中引入(任何ui均可以这种方式)
2.也可经过模块引到main.js里面,最终打包到build里面,包会变得大
引入 main.js 入口文件,全局引入,任地方都能用
Vue.js UI框架 - element
文档:http://element.eleme.io/#/zh-CN/component/installation
安装:
npm i element-ui -D
配置:
http://element.eleme.io/#/zh-CN/component/quickstart
{
test: /\.css$/,
loader: 'style-loader!css-loader'
},
{
test: /\.(eot|svg|ttf|woff|woff2)(\?\S*)?$/,
loader: 'file-loader'
},
引入:
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-default/index.css';
Vue.use(ElementUI);
------------------------------------------
npm install element-ui -D
-D --save-dev
-S --save
css-loader 引入css
字体图标 file-loader
style-loader
<style scoped lang="less">
less有两个loader
less和less-loader
@color:red;
.height(@h){
height:@h;
}
.my-grid{
.height(30px);
border:1px solid @clor;
}
--------------------------------------------------
就须要按钮
1.babel-plugin-component 须要引入这个组件
cnpm install babel-plugin-component -D
须要配置,只要跟babel相关的都须要配置
2.在.babelrc里面配置:
{
"presets": [
["es2015", { "modules": false }]
],
"plugins": [["component", [
{
"libraryName": "element-ui",
"styleLibraryName": "theme-default"
}
]]]
}
3.若是你只但愿引入部分组件,好比 Button 和 Select,那么须要在 main.js 中写入如下内容:
引入:
import Vue from 'vue'
import { Button, Select } from 'element-ui'
import App from './App.vue'
使用:
Vue.component(Button.name, Button)
Vue.component(Select.name, Select)
/* 或写为
* Vue.use(Button)
* Vue.use(Select)
*/
-----------------------------------------------