美文网首页
2018-07-02

2018-07-02

作者: 烦小囡 | 来源:发表于2018-07-02 15:33 被阅读0次

    使用vue-cli进行项目搭建

    1.安装node

    若已安装则跳过这步

    2.安装vue-cli
    npm install -g vue-cli
    
    3.创建项目
    vue init webpack 项目名
    

    命令行会遇到配置项,目前是全部回车,使用默认选项。

    4.启动项目
    cd 项目名
    npm run dev
    
    5.项目启动成功后,打开对应链接

    Vue Router

    安装

    若是使用vue-cli搭建的项目会默认安装,可跳过这步

    npm install --save vue-router
    
    基本使用方式

    html

    <script src="https://unpkg.com/vue/dist/vue.js"></script>
    <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
    
    <div id="app">
      <h1>Hello App!</h1>
      <p>
        <!-- 使用 router-link 组件来导航. -->
        <!-- 通过传入 `to` 属性指定链接. -->
        <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
        <router-link to="/foo">Go to Foo</router-link>
        <router-link to="/bar">Go to Bar</router-link>
      </p>
      <!-- 路由出口 -->
      <!-- 路由匹配到的组件将渲染在这里 -->
      <router-view></router-view>
    </div>
    

    js

    // 0. 如果使用模块化机制编程,导入Vue和VueRouter,要调用 Vue.use(VueRouter)
    
    // 1. 定义 (路由) 组件。
    // 可以从其他文件 import 进来
    const Foo = { template: '<div>foo</div>' }
    const Bar = { template: '<div>bar</div>' }
    
    // 2. 定义路由
    // 每个路由应该映射一个组件。 其中"component" 可以是
    // 通过 Vue.extend() 创建的组件构造器,
    // 或者,只是一个组件配置对象。
    const routes = [
      { path: '/foo', component: Foo },
      { path: '/bar', component: Bar }
    ]
    
    // 3. 创建 router 实例,然后传 `routes` 配置
    // 还可以传别的配置参数。
    const router = new VueRouter({
      routes // (缩写) 相当于 routes: routes
    })
    
    // 4. 创建和挂载根实例。
    // 记得要通过 router 配置参数注入路由,
    // 从而让整个应用都有路由功能
    const app = new Vue({
      router
    }).$mount('#app')
    
    // 现在,应用已经启动了!
    
    动态路由匹配
    const router = new VueRouter({
      routes: [
        // 动态路径参数 以冒号开头
        { path: '/user/:id', component: User }
      ]
    })
    
    响应路由参数的变化
    const User = {
      template: '...',
      watch: {
        '$route' (to, from) {
          // 对路由变化作出响应...
        }
      }
    }
    
    const User = {
      template: '...',
      beforeRouteUpdate (to, from, next) {
        // react to route changes...
        // don't forget to call next()
      }
    }
    
    嵌套路由
    const router = new VueRouter({
      routes: [
        { path: '/user/:id', component: User,
          children: [
            {
              path: '',
              component: UserHome
            },
            {
              // 当 /user/:id/profile 匹配成功,
              // UserProfile 会被渲染在 User 的 <router-view> 中
              path: 'profile',
              component: UserProfile
            },
            {
              // 当 /user/:id/posts 匹配成功
              // UserPosts 会被渲染在 User 的 <router-view> 中
              path: 'posts',
              component: UserPosts
            }
          ]
        }
      ]
    })
    
    编程式的导航
    router.push

    想要导航到不同的 URL,则使用 router.push 方法。这个方法会向 history 栈添加一个新的记录,所以,当用户点击浏览器后退按钮时,则回到之前的 URL。

    // 一般形式
    router.push(location, onComplete, onAbort)
    
    // 字符串
    router.push('home')
    
    // 对象
    router.push({ path: 'home' })
    
    // 命名的路由
    router.push({ name: 'user', params: { userId: 123 }})
    
    // 带查询参数,变成 /register?plan=private
    router.push({ path: 'register', query: { plan: 'private' }})
    
    router.replace

    跟 router.push 很像,唯一的不同就是,它不会向 history 添加新记录,而是跟它的方法名一样 —— 替换掉当前的 history 记录。

    // 一般形式
    router.replace(location, onComplete, onAbort)
    
    router.go

    这个方法的参数是一个整数,意思是在 history 记录中向前或者后退多少步,类似 window.history.go(n)

    // 一般形式
    router.go(n)
    
    // 在浏览器记录中前进一步,等同于 history.forward()
    router.go(1)
    
    // 后退一步记录,等同于 history.back()
    router.go(-1)
    
    // 前进 3 步记录
    router.go(3)
    
    // 如果 history 记录不够用,那就默默地失败
    router.go(-100)
    router.go(100)
    
    命名路由

    有时候,通过一个名称来标识一个路由显得更方便一些,特别是在链接一个路由,或者是执行一些跳转的时候。你可以在创建 Router 实例的时候,在 routes 配置中给某个路由设置名称。

    const router = new VueRouter({
      routes: [
        {
          path: '/user/:userId',
          name: 'user',
          component: User
        }
      ]
    })
    
    // 直接使用名称
    router.push({ name: 'user', params: { userId: 123 }})
    
    <!-- 直接使用名称 -->
    <router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link>
    
    命名视图

    有时候想同时 (同级) 展示多个视图,而不是嵌套展示,例如创建一个布局,有 sidebar (侧导航) 和 main (主内容) 两个视图,这个时候命名视图就派上用场了。你可以在界面中拥有多个单独命名的视图,而不是只有一个单独的出口。如果 router-view 没有设置名字,那么默认为 default。

    <router-view class="view one"></router-view>
    <router-view class="view two" name="a"></router-view>
    <router-view class="view three" name="b"></router-view>
    

    一个视图使用一个组件渲染,因此对于同个路由,多个视图就需要多个组件。确保正确使用 components 配置 (带上 s):

    const router = new VueRouter({
      routes: [
        {
          path: '/',
          components: {
            default: Foo,
            a: Bar,
            b: Baz
          }
        }
      ]
    })
    
    重定向

    重定向也是通过 routes 配置来完成,下面例子是从 /a 重定向到 /b

    const router = new VueRouter({
      routes: [
        { path: '/a', redirect: '/b' }
      ]
    })
    
    别名

    /a 的别名是 /b,意味着,当用户访问 /b 时,URL 会保持为 /b,但是路由匹配则为 /a,就像用户访问 /a 一样。

    const router = new VueRouter({
      routes: [
        { path: '/a', component: A, alias: '/b' }
      ]
    })
    

    部署文档

    不使用构建工具

    如果用 Vue 完整独立版本,即直接用 <script> 元素引入 Vue 而不提前进行构建,请记得在生产环境下使用压缩后的版本 (vue.min.js)。

    使用构建工具

    生成生产环境的代码(使用vue-cli构建项目)

    npm run build
    

    会生成dist文件,里面有index.html作为入口文件。

    直接将dist里的文件复制到服务器上,按照现在的仓库自动上测试服的方式,在对应网址后加 dist/ 即可。若有需要,也可不加 dist/,需要在vue-cli自动生成基础上修改一下,可写一个小脚本处理。

    axois

    安装
    npm install axios
    
    基本使用方式
    // get请求
    axios.get('/user?ID=12345')
      .then(function (response) {
        console.log(response);
      })
      .catch(function (error) {
        console.log(error);
      });
    
    // post请求
    axios.post('/user', {
        firstName: 'Fred',
        lastName: 'Flintstone'
      })
      .then(function (response) {
        console.log(response);
      })
      .catch(function (error) {
        console.log(error);
      });
    
    请求方法
    axios.request(config)
    axios.get(url[, config])
    axios.delete(url[, config])
    axios.head(url[, config])
    axios.options(url[, config])
    axios.post(url[, data[, config]])
    axios.put(url[, data[, config]])
    axios.patch(url[, data[, config]])
    
    处理并发
    function getUserAccount() {
      return axios.get('/user/12345');
    }
    
    function getUserPermissions() {
      return axios.get('/user/12345/permissions');
    }
    
    // axios.all(iterable)
    // axios.spread(callback)
    axios.all([getUserAccount(), getUserPermissions()])
      .then(axios.spread(function (acct, perms) {
        // Both requests are now complete
      }));
    
    兼容情况

    ie8及以上

    vue和react对比

    • 都使用 Virtual DOM
    • 都提供了响应式 (Reactive) 和组件化 (Composable) 的视图组件
    • 性能都非常快
    • 都提供了强大的路由
    • 可使用相同状态管理模式
    • 都有生命周期函数
    • 如要避免不必要的子组件的重渲染,
      • react需要使用PureComponent,或是手动实现 shouldComponentUpdate 方法
      • vue自动追踪,不需要考虑此类优化
    • HTML & CSS
      • react使用jsx
      • vue使用Templates
    react优势:
    • 更丰富的生态系统
    • 更适合大型应用和更好的可测试性
    • 可开发原生APP应用
    vue优势:
    • 简单易上手
    • 原生js的项目迁移到vue更容易
    • 体积更小

    相关文章

      网友评论

          本文标题:2018-07-02

          本文链接:https://www.haomeiwen.com/subject/gkdluftx.html