一、环境搭建
1.安装nodejs ((https://nodejs.org/en/)
2.安装脚手架 npm install --global vue-cli /cnmp install --global vue-cli 可以安装cnpm 用淘宝镜像 npm install -g cnpm --registry=https://registry.npm.taobao.org
3.
(1)复杂的创建项目,必须cd 到对应的一个目录中
vue init webpack vue-demo01
cd vue-demo01
npm run dev
(2)简单的(推荐)
vue init webpack-simple vue-demo02
cd vue-demo02
cnpm install
cnpm run dev

我们用vs code 打开项目,vs code 安装vue扩展插件(Vue 2 Snippets)

二、vue 绑定数据、绑定属性、绑定事件

App.vue文件内容

<template>
<!-- 只能有一个id,所有页面都写在div里面 -->
<div id="app">
<!--绑定数据-->
aa {{msg}}<br/>
{{obj.name}}
<br/>
<ul>
<li v-for="(item,index) in list" :class="{'red':index==0,'blue':index==1}">{{item}}--{{index}}</li>
</ul>
<ul>
<li v-for="item in list1">{{item.name}}--{{item.age}}</li>
</ul>

<!--绑定属性,v-bind可以省略-->
<div v-bind:title="title">鼠标放上去</div>
<div :title="title">鼠标放上去</div>

<!--绑定html-->
<div v-html="html"></div>

<input type="text" v-model="msg" />

<input type="button" value="单击" v-on:click="myclick"/>
<input type="button" value="单击" @click="myclick"/>

</div>
</template>

<script>
// 业务逻辑,返回数据
export default {
name: 'app',
data () {
return {
msg: 'Welcome to Your Vue.js App',
title:"title",
html:"<span style='color:red;'>aa</span>",
obj:{
name:"张三"
},
list:['11',"22"],
list1:[
{"name":"aa","age":11},{"name":"bb","age":22}

]
}
},
methods:{
myclick:function(){
alert("click");
}

}
}
</script>

<style>

</style>

三、生命周期函数和模块化导入
新建一个model文件夹,然后创建一个product.js文件
product.js
var product = {

getProducts(){
return [{id:1,name:"aa"},{id:2,name:"bb"},]
},
saveProduct(){

}

}

export default product;

接下来就可以在App.vue里面使用product.js中的对象了

App.vue
<template>
<!-- 只能有一个id,所有页面都写在div里面 -->
<div id="app">
{{msg}}

</div>
</template>

<script>

//导入模块化文件
import product from './model/product.js'

// 业务逻辑,返回数据
export default {
name: 'app',
data () {
return {
msg: 'Welcome to Your Vue.js App'
}
},
methods:{
myclick:function(){
alert("click");
}

},
//生命周期函数 vue页面刷新就会触发的方法
mounted() {
this.msg ="11";

console.log(product.getProducts())
},
}
</script>

<style>

</style>

四、vue组件
就是各种组件重用,类似部分视图
新建文件夹components,新建Home.vue
Home.vue

<template>
<!-- 只能有一个id,所有页面都写在div里面 -->
<div id="app">
<h1>{{msg}}}</h1>
</div>
</template>

<script>

// 业务逻辑,返回数据
export default {
name: 'app',
data () {
return {
msg: 'Welcome to Your Vue.js App'
}
},
methods:{
myclick:function(){
alert("click");
}

}
}

</script>

<!--局部作用域,只对当前页面有效-->
<style scoped>
h1{
color:red;

}
</style>

然后在App.vue中使用<v-home></v-home>
import Home from './components/Home.vue';
components:{

'v-home':Home
}

App.vue
<template>
<!-- 只能有一个id,所有页面都写在div里面 -->
<div id="app">
{{msg}}

<v-home></v-home>

</div>
</template>

<script>

//导入模块化文件
import product from './model/product.js';

import Home from './components/Home.vue';

// 业务逻辑,返回数据
export default {
name: 'app',
data () {
return {
msg: 'Welcome to Your Vue.js App'
}
},
methods:{
myclick:function(){
alert("click");
}

},
//生命周期函数 vue页面刷新就会触发的方法
mounted() {
this.msg ="11";

console.log(product.getProducts())
},
components:{

'v-home':Home
}
}
</script>

<style>

</style>

五、生命周期函数
主要有两个 mounted(){}请求数据,操作dom时候使用
beforeDestroy(){}页面销毁之前触发,可以在销毁之前保存一些数据

六、请求数据(从github 看帮助文档)
使用vue-resource 官方提供的vue的一个插件(现在已经不更新了,不推荐用了)
1.在项目目录下 cnpm install vue-resource --save
2.main.js 写入 import VueResource from "vue-resource"; Vue.use(VueResource);
3.调用方法 this.$http.get('http://www.phonegap100.com/appapi.php?a=getPortalList&catid=20&page=1').then(response => {
// get body data
console.log(response.body);
}, response => {
// error callback
});

使用axios
cnpm install axios --save
在要使用的页面调用import axios from 'axios';
axios.get('http://www.phonegap100.com/appapi.php?a=getPortalList&catid=20&page=1', {})
.then(function (response) {
console.log(response.data.result);
})
.catch(function (error) {
console.log(error);
});

如果跨域请求使用fetch-jsonp

七、父页面传递子页面数据
1.父页面: <v-header :parenttitle="title" :parentMethod="parent" :home="this" ></v-header>
可以传递字符串也能传递方法和自己对象
2.子页面进行接收 props:["parenttitle","parentMethod","home"],调用
Home.vue
<template>
<!-- 只能有一个id,所有页面都写在div里面 -->
<div id="app">
<v-header :parenttitle="title" :parentMethod="parent" :home="this" ></v-header>
</div>
</template>

<script>

import Header from './Header.vue';

// 业务逻辑,返回数据
export default {
name: 'app',
data () {
return {
title:"我的父页面传过来的值",
}
},
methods:{
parent:function(arg){
console.log("我是父页面的方法"+arg);
}

},
components:{
'v-header':Header,
}
}

</script>

<!--局部作用域,只对当前页面有效-->
<style scoped>
h1{
color:red;

}
</style>

Header.vue
<template>
<!-- 只能有一个id,所有页面都写在div里面 -->
<div id="app">
<h1>{{msg}}</h1>
<h1>{{parenttitle}}</h1>
<button @click="parentMethod('header')">调用父页面的方法</button>
<button @click="getParent()">获取父页面对象</button>
</div>
</template>

<script>

// 业务逻辑,返回数据
export default {
name: 'app',
data () {
return {
msg: '我的Header'
}
},
methods:{
getParent:function(){
console.log(this.home.title);
}
},
props:["parenttitle","parentMethod","home"]
}

</script>

<!--局部作用域,只对当前页面有效-->
<style scoped>
h1{
color:red;

}
</style>

八、父页面调用子页面的方法和子页面调用父页面的方法
父页面调用子页面的方法属性
父页面 <v-header ref="header"></v-header>
getChild:function(){
console.log(this.$refs.header.msg);
this.$refs.header.headerMethod();
}
子页面
data () {
return {
msg: '我的Header'
}
},
headerMethod:function(){
console.log("我是header方法");
}

子页面调用父页面的方法属性
在子页面中调用this.$parent.parentMethod();

九、使用vuex 状态管理进行非父子组件传值
vuex是一个专为vue.js应用程序开发的状态管理模式(大型项目中使用,小型项目中使用localstorage,sessionstorage)
1.vuex 解决了不同组件之间的数据共享问题
2.组件里面的数据持久化
vuex的使用
1.src目录下面新建一个vuex的文件夹
2.vuex文件夹里面新建一个store.js
3.安装vuex
cnpm install vuex --save
4.在刚才创建的store.js 引入vue ,引入vuex,并且use vuex
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
5.定义数据
//根据业务定义数据
var state = {
count:1
}
6.定义方法, mutations 里面放的是方法,方法主要用于改变state里面的数据
var mutations = {
incCount(){
++state.count;
}
}
暴露
const store = new Vuex.Store({
state,
mutations
})
export default store;

在组件里面使用vuex:
1.引入 store
import store from '../vuex/store.js';
2.注册
export default{
data(){
return {
msg:"aa"
}
},
store,
methods:{
incCount(){
this.$store.commit('incCount');//触发state里面的数据
}
}
}

3.获取state里面的数据
this.$store.state.数据 (this.$store.state.count)
4.触发 mutations改变state里面的数据
this.$store.commit('incCount')

十、路由vue-router
1.安装组件
cnpm install vue-router --save
main.js 中写入
import VueRouter from "vue-router";
Vue.use(VueRouter);

//1.创建组件
import Home from './components/Home.vue';
import News from './components/News.vue';
//2.配置路由
const routes = [
{ path: '/home', component: Home },
{ path: '/news', component: News },
{ path: '*', redirect: '/home' }//默认页面使用Home
]
//3.实例化路由
const router = new VueRouter({
routes // (缩写) 相当于 routes: routes
})
//4.挂载路由

new Vue({
el: '#app',
router,//使用router
render: h => h(App)
})

//5.App.vue 放入
<!-- 使用 router-link 组件来导航. -->
<!-- 通过传入 `to` 属性指定链接. -->
<!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
<router-link to="/home">首页</router-link>
<router-link to="/news">新闻页面</router-link>
<hr/>
<router-view></router-view>

十一、vue动态路由和get传值
动态路由
1.main.js 配置动态路由
import Content from './components/Content.vue';
const routes = [
{ path: '/content/:id', component: Content }
]
2.跳转 <router-link :to="'/content/'+id">新闻详情Content</router-link>
3.在Content页面获取请求参数
mounted() {
console.log(this.$route.params);
}

get 传值

1.main.js 配置动态路由
import Content from './components/Content.vue';
const routes = [
{ path: '/content', component: Content }
]
2.跳转 <router-link to="/content?id=111">新闻详情Content</router-link>
3.在Content页面获取请求参数
mounted() {
console.log(this.$route.query);
}

十二、vue路由编程式导航和hash模式 history模式
js触发跳转页面
1.this.$router.push({path:"news"});
2.this.$router.push({path:"/content/222"});
3.可以定义路由名字跳转 {path:"/news",component:News,name:"news"} router.push({name:"news",params:{userId:123}});

访问地址是#的是hash模式,去掉#是history模式 ,在 main.js中的路由设置
const router = new VueRouter({
mode:"history",
routes // (缩写) 相当于 routes: routes
})

十三、Vue中路由的嵌套
1.配置路由
main.js
import User from './components/User.vue';
import UserAdd from './components/User/UserAdd.vue';
import UserList from './components/User/UserList.vue';

{
path:'/user',
component:User,
children:[
{path:"useradd",component:UserAdd},
{path:"userlist",component:UserList}

]
}
2.父路由里面配置子路由显示的地方
<div>
<router-link to="/user/useradd">useradd</router-link>
<router-link to="/user/userlist">userlist</router-link>
</div>
<br/>
<div>
<router-view></router-view>
</div>
</div>

十四、vue的ui框架
饿了么公司基于vue开发的vue ui 组件库
Element Ui 基于vue pc 端的ui框架
Mint Ui 基于vue 移动端的ui框架

Element Ui 使用
安装:cnpm i element-ui -S

main.js中

import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';

Vue.use(ElementUI);

webpack.config.js 中
{
test: /\.(eot|svg|ttf|woff|woff2)(\?\S*)?$/,
loader: 'file-loader'
}

可以使用了
<el-row>
<el-button>默认按钮</el-button>
<el-button type="primary">主要按钮</el-button>
<el-button type="success">成功按钮</el-button>
<el-button type="info">信息按钮</el-button>
<el-button type="warning">警告按钮</el-button>
<el-button type="danger">危险按钮</el-button>
</el-row>

十五、路由的模块化
新建文件夹router,新建router.js
import Vue from 'vue'
import VueRouter from "vue-router";
Vue.use(VueRouter);

import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);

//1.创建组件
import Home from '../components/Home.vue';
import News from '../components/News.vue';
import Content from '../components/Content.vue';
import User from '../components/User.vue';
import UserAdd from '../components/User/UserAdd.vue';
import UserList from '../components/User/UserList.vue';
//2.配置路由
const routes = [
{ path: '/home', component: Home },
{ path: '/news', component: News },
{ path: '/content/:id', component: Content },
{ path: '/content', component: Content },
{
path:'/user',
component:User,
children:[
{path:"useradd",component:UserAdd},
{path:"userlist",component:UserList}

]
},
{ path: '*', component: Home }//默认页面使用Home
]
//3.实例化路由
const router = new VueRouter({
mode:"history",
routes // (缩写) 相当于 routes: routes
})

export default router

main.js
import Vue from 'vue'
import App from './App.vue'
import VueResource from "vue-resource";
Vue.use(VueResource);

import router from './router/router.js'

//4.挂载路由

new Vue({
el: '#app',
router,
render: h => h(App)
})

Vue基础知识学习笔记的更多相关文章

  1. Objective-c基础知识学习笔记

    Objective-c基础知识学习笔记(一) 一直有记录笔记的习惯.但非常久没分享一些东西了,正好上半年開始学习IOS了,如今有空写点.因开发须要,公司特意为我们配置了几台新MAC.还让我们自学了2周 ...

  2. 〖前端开发〗HTML/CSS基础知识学习笔记

    经过一天的学习,把慕课网的HTML/CSS基础知识学完了,笔记整理: 1. 文件结构: HTML文件的固定结构: <html> <head>...</head> & ...

  3. java基础知识学习笔记

    本文知识点以js为参照.对比分析得出笔记.JavaScript之所以叫JavaScript是打算借助java推广自己.虽然都是开发语言,但JavaScript一开始主要运行在 客户端,而java主要运 ...

  4. Vue基础知识学习(后端)

    ### Vue学习(后端) Vue安装 -引入文件安装,直接在官网下载vue.js引入项目中 -直接引用CDN -NPM安装(构建大型应用使用,在这不用) -命令行工具(构建大型单页应用,在这不用) ...

  5. 传智播客 Html基础知识学习笔记

    HTML基础 <p></p>标志对用来创建一个段落,,<p>标志还可以使用align属性, 它用来说明对齐方式 语法是:<p align="&quo ...

  6. Unity基础知识学习笔记二

    1,object Instantiate(object original,Vector3 position,Quaternion rotation)       克隆原始物体,并返回克隆物体.     ...

  7. Unity基础知识学习笔记一

      1,Unity 4.5.4这个版本,在打包ios应用程序的时候.会生成一个xcode工程,但是这个工程无法在xcode6上变异,无法生成ios8上发布.所以unity在ios8发布3天内就发了4. ...

  8. jquery基础知识学习笔记

    jquery是一个js库/常用版本是jjquery-1.7.2.js/这个版本主要是用来做开放用途 做产品的时候是用它的min版本.玩jquery的时候,不管干啥都要花钱(美元)   注意点: 1.s ...

  9. CSS基础知识学习笔记

    1.css基本样式讲解 1.1 css背景background-attachment:背景图像是否固定或者随着页面的其余部分滚动background-color:设置元素的背景颜色background ...

随机推荐

  1. k8s运维处理

    k8s运维处理 驱逐节点容器,进行docker,等重要组件的重启时,打驱逐标记 kubectl drain [option --node ip] 进行重启docker或kubelet等其他操作,操作完 ...

  2. Apache/Nginx的web网页访问加密

  3. OSI七层模型数据流

    前段时间去学习了思科网络基础CCNA的知识,与我们运维所需的网络基础大同小异,当然其包容性要大很多.我们主要来看下网络方面的内容: 网络七层模型 七层网络模型是我们进行网络间通信的基本理论依据,由上至 ...

  4. PAT甲级1015题解——令人迷茫的翻译

    题目分析: 本题计算过程简单,但翻译令我迷茫:题意读清楚很重要(反正我是懵逼了)对于一个10进制的数,如果它是一个素数,把它转换成d进制,再将这个序列逆序排,这个逆序的d进制数的10进制表示如果也是素 ...

  5. PAT甲级1013题解——并查集+路径压缩

    题目分析: 本题初步浏览题目就知道是并查集的模板题,数据输入范围N为1~1000,则M的范围为0~1000^2,通过结构体记录每一对连线的关系,p[]数组记录每个节点的跟,对于k次查询,每次都要重新维 ...

  6. SpringBoot——探究HelloWorld【三】

    前言 前面我们写了helloworld的一个,这里我们对他进行分析 探究 那么下面就开始我们的探究之旅吧,首先从POM文件来,在POM文件中我们导入了项目所需要的依赖 POM文件 父项目 <pa ...

  7. Log4j 日志输出学习(Eclipse)

    学习网址1:http://www.cnblogs.com/licheng/archive/2008/08/23/1274566.html 一.快速入手 1.官网下载log4j压缩包,本地加压 2.Ec ...

  8. 记一次PATH环境变量设置不生效的问题

    问题:卸载原有版本jdk后,如下图在/etc/profile中配置新的环境变量且source /etc/profile 生效配置后,JAVA_HOME值都正确,但PATH变量值还是不对 echo $P ...

  9. Codeforces 484 E. Sign on Fence

    [传送门] 题意就是给一排围栏,每个围栏都有一个高度,查询区间$\left[l, r\right]$之间长度为$w$的子区间的最小高度的最大值.首先,这个最大值肯定是这个区间里的围栏的某个高度,如果是 ...

  10. day001-在Windows下python环境的搭建

    一.Python下载 1.Python最新源码,二进制文档,新闻资讯等可以在Python的官网查看到: 2.Python官网:https://www.python.org/ 3.你可以在以下链接中下载 ...