npm实际上是Node.js的包管理工具(package manager)。npm能够根据依赖关系,把全部依赖的包都下载下来并管理起来。不然,靠咱们本身手动管理,确定既麻烦又容易出错。要安装npm只需安装node.js便可,经过node.js官网(https://nodejs.org/en/)下载node.js,按步骤安装便可,在Windows上安装时务必选择所有组件,包括勾选Add to Path。安装完成后,请打开命令提示符,而后输入node -v,若是安装正常有版本信息输出表明安装完成,此时能够输入npm -v 检测npm是否安装成功,若是安装成功,则会有npm版本信息。javascript
npm install cnpm -g --registry=https://registry.npm.taobao.org
npm install -g vue-cli
vue init webpack demo / vue init webpack-simple demo(完整的/简化的)
cd demo(项目目录)
cnpm install(下载依赖)
npm run dev
cnpm install vue-resource --save
<script> import VueResource from 'vue-resource'; Vue.use(VueResource); </script>
var api = api; this.$http.get(api).then((response)=>{ console.log(response); var list = response.body.data; this.list = list; },response=>{ console.log(err); })
cnpm install axios --save
<script> import Axios from 'axios'; </script>
Axios.get(api).then((response)=>{ console.log(response); var list = response.data.data; this.list = list; }).catch((err)=>{ console.log(err); })
import Home from '组件的相对路径';
components:{ 'v-home':Home, //v-home 为自定义标签 }
<v-home></v-home>
<!--父组件给子组件传值:在调用子组件标签中绑定自定义属性title并赋值title 如果方法 不要加()--> <v-header :title="title" :run="run"></v-header>
props:['title','run']//接收父组件传过来的值 props是一个数组
<div>我是头部组件--{{title}}</div>//这里的title就是props中接收的值 <button @click="run()">子组件执行父组件run方法</button>
<v-header ref="header"></v-header> //header 至关于给子组件给一个id
this.$refs.header.msg //获取子组件中msg属性
this.$refs.header.run(); //执行子组件中的run()方法
this.$parent.msg //获取父组件中msg属性
this.$parent.run(); //执行父组件中的run()方法
新建一个空的vue实例html
import Vue from 'vue' var VueEvent = new Vue();
export default VueEvent;
//在须要传值的页面引入vue实例 import VueEvent from "新建空的Vue实例.js文件的相对路径" //VueEvent为新建的Vue实例 to-news 为该广播数据的key this.msg为要广播的数据 VueEvent.$emit("to-news",this.msg)
//在须要接收广播数据的页面引入新建的Vue实例 import VueEvent from "新建空的Vue实例.js文件的相对路径" //监听广播数据 mounted(){ //to-news为广播数据时的key VueEvent.$on("to-news",data=>{ console.log(data); }) }
Vue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。包含的功能有:vue
npm install vue-router --save / cnpm install vue-router --save
import VueRouter from 'vue-router' Vue.use(VueRouter)
//引入组件 import News from "组件1的相对路径"; import Home from "组件2的相对路径";
2. 定义路由java
const routes = [ { path: '/foo', component: Foo }, { path: '/bar', component: Bar }, { path: '*', component: Bar } //默认页面 ]
在这里,也能够为路由命名,例如:node
const routes = [ { path: '/foo', component: Foo,name:'Foo' }, { path: '/bar', component: Bar,name:'Bar' } ]
3. 实例化VueRouterwebpack
const router = new VueRouter({ routes // (缩写) 至关于 routes: routes })
4. 建立和挂载根实例ios
const app = new Vue({ router }).$mount('#app')
5. 使用router-link组件导航git
<router-link to="/foo">Go to Foo</router-link> <router-link to="/bar">Go to Bar</router-link>
若是是已命名路由,也能够写成:github
<router-link to="{name:'Foo'}">Go to Foo</router-link> <router-link to="{name:'Bar'}">Go to Bar</router-link>
若是要带参数形式以下:web
<router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link>
这种形式下,目的地地址至关于:
/user/123
6. 渲染路由匹配到的组件
<router-view></router-view>
在配置路由时,path参数动态变化部分用":参数名"代替,当匹配到一个路由时,参数值会被设置到 this.$route.params
,能够在每一个组件内使用。举例以下:
模式 | 匹配路径 | $route.params |
---|---|---|
/user/:username | /user/evan | { username: 'evan' } |
/user/:username/post/:post_id | /user/evan/post/123 | { username: 'evan', post_id: '123' } |
3. 对于普通的路由,可使用get传值
模式 | 匹配路径 | $route.params.qurey |
---|---|---|
/user?id=123 | /user | { id: '123' } |
除了使用 <router-link>
建立 a 标签来定义导航连接,咱们还能够借助 router 的实例方法,经过编写代码来实现。
router.push(location, onComplete?, onAbort?)
想要导航到不一样的 URL,则使用 this.$router.push()
方法。这个方法会向 history 栈添加一个新的记录,因此,当用户点击浏览器后退按钮时,则回到以前的 URL
相比:
声明式 | 编程式 |
---|---|
<router-link :to="..."> |
this.$router.push(...) |
该方法的参数能够是一个字符串路径,或者一个描述地址的对象。例如:
// 字符串 router.push('home') // 跳转到/home // 对象 home是配置路由时配置的组件路径 // 跳转到/home router.push({ path: 'home' }) // 命名的路由 router.push({ name: 'user', params: { userId: '123' }}) // 跳转到/user/123 // 带查询参数,变成 /register?plan=private router.push({ path: 'register', query: { plan: 'private' }}) //跳转到 /register?plan=private
注意:若是提供了 path
,params
会被忽略,上述例子中的 query
并不属于这种状况。取而代之的是下面例子的作法,你须要提供路由的 name
或手写完整的带有参数的 path
:
const userId = '123' router.push({ name: 'user', params: { userId }}) // -> /user/123 router.push({ path: `/user/${userId}` }) // -> /user/123 // 这里的 params 不生效 router.push({ path: '/user', params: { userId }}) // -> /user
一样的规则也适用于 router-link
组件的 to
属性。
在 2.2.0+,可选的在 router.push
或 router.replace
中提供 onComplete
和 onAbort
回调做为第二个和第三个参数。这些回调将会在导航成功完成 (在全部的异步钩子被解析以后) 或终止 (导航到相同的路由、或在当前导航完成以前导航到另外一个不一样的路由) 的时候进行相应的调用。
注意: 若是目的地和当前路由相同,只有参数发生了改变 (好比从一个用户资料到另外一个 /users/1
-> /users/2
),你须要使用 beforeRouteUpdate
来响应这个变化 (好比抓取用户信息)。
router.replace(location, onComplete?, onAbort?)
跟 this,$router.push()
很像,惟一的不一样就是,它不会向 history 添加新记录,而是跟它的方法名同样 —— 替换掉当前的 history 记录。
声明式 | 编程式 |
---|---|
<router-link :to="..." replace> |
router.replace(...) |
router.go(n)
这个方法的参数是一个整数,意思是在 history 记录中向前或者后退多少步,相似 window.history.go(n)
。
例子
// 在浏览器记录中前进一步,等同于 history.forward() router.go(1) // 后退一步记录,等同于 history.back() router.go(-1) // 前进 3 步记录 router.go(3) // 若是 history 记录不够用,那就默默地失败呗 router.go(-100) router.go(100)