vue weex 调用原生toast_Vue框架原理及简单应用

前言

1、Vue.js 是一个JavaScriptMVVM库,是一套构建用户界面的渐进式框架

2、是以数据驱动和组件化的思想构建的,采用自底向上增量开发的设计

3、vue + vuex+ vue-resource + vue-router + webpack + es6 + less的项目架构成为了越来越多大公司的第一选择

一、创建vue项目

1、通过命令创建一个vue项目

vue create hello-world

9202bd9c46105c57c02c7a30a2d2137a.png

npm install -g @vue/cli

1da0f18918262523a8b7e9182d68569c.png
04655b85ea760e0b0b06fa4fbab3f922.png

创建好的目录结构

1a448dad765590bb55d05aea4f439f08.png
12258fa25063dcdd889bd945b541f724.png
ba86843d6dc2ad7cf78aac68bf0fb688.png

2、通过ui页面方式创建一个项目

vue ui

0f27f09247dc0439d58bfb578f94b6cd.png
396e908b65fcada95961c010fda38b64.png
92ee2cdc26e200a1a37cee6f79291ad6.png
dfde4ac75bf3df30bb59cdf3442e45f3.png
6d3e4a3f85f3e4a3feabef02492a0e6d.png
c4cedaf2c6170c6fee26309f55785908.png
0b1e2af616faa68dafea0f5785e2eac1.png
fbce042a5db906a23867cfcfad2010fe.png
871edeac0a7dd45acf70e4c75d6c37bf.png
847eb8826580c29c72555f323d0ae3d3.png

二、调试插件

09de1889f0d7ed9d1ae83c2efd5a16f9.png
0ebf18c80627af4b99673b9196c4a21e.png
a400e73db0e421e2fd48a79c2e0f6c4f.png
3d1bdf4c6883ff8fe8623bcd5599964a.png

启动vue项目的一个报错

npm run dev

31c2ece379a9c4015c22f42829b73b7e.png

报错说明是node版本问题

当前环境

36164812cb2b5f562aa9ef1eec5e5639.png

brew search node

58ad0668aaec0f451ade2328c9b95aa1.png

npm install -g n

sudo n 10.19.0

4cef9994f6443ab56aa382b6e2dafa56.png

npm run dev

c44a67cca59f6b94156013265ad201b5.png

将node版本升级了之后 需要重新编译下sass

npm rebuild node-sass

0a6ca82e772cb23b997f62947f6e5289.png
7c75b2e542dd7eaaff5d29b3aa1a38f6.png
76062287a4234f02823fbbefaa7b4071.png
c6937e31dddbb7ed2b81c01582a1d82c.png

三、VUE组件库

1、vue组件库

若vue2.0作为前端框架 可以选择饿了么推出的Element组件

https://github.com/mengfanxiao/element.git

vue、React、Angular1对比

a、性能 对比

Angular1中,在scope作用域中每一次数据变化,会触发watcher的重新计算,angular对常用的dom事件,xhr事件等做了封装, 在里面触发进入angular的digest流程。在digest流程里面,会从rootscope开始遍历, 检查所有的watcher。并且,如果一些 watcher 触发另一个更新,脏检查循环(digest cycle)可能要运行多次

Vue则没有这个问题,因为它使用基于依赖追踪的观察系统并且异步队列更新,数据的变化都是的,除非数据之间有明确的依赖关系

vue开发团队建立了一个简单的对比性能的项目

负责渲染10000个列表项100次。Vue官方将每一个参照项目都分别运行 20 次并取最好的结果结果如下图:

7c928cf3ae0eeb6aa4a744ff4d618dba.png

由此可见,Vue的性能是远好于Angular1,并且稍微优于React的。

b、社区拓展对比

Angular1的背后是Google,所以社区基础是不需要担心的,从Tutorial到StackOverflow的问题数量都可以反映出生态系统很完整。Angular1之后的2.0版本几乎是一个推翻重做的框架,对于使用了1.X版本的项目,想要平滑的升级过渡到2.0版本应该是非常困难的。现在Angular2的线上应用数量还不算太多,主流编码还是以1.X版本居多。这个版本化巨大的差异也间接影响到了开发者对于angular的信心。

Vue和React都有强大的社区支持。React有状态管理库Flux、ReduxVue,相应的,Vue有vuex。Vue 和 React 都提供了强大的路由库来应对大型应用。然而Vue的路由库和状态管理库都是由官方维护支持的。React 则是选择把这些问题交给社区维护,因此创建了一个更分散的生态系统。但相对的,React 的生态系统相比 Vue 更加繁荣。此外,Vue 提供了Vue-cli 脚手架,包括了Webpack,Browserify,甚至路由库,能让你非常容易地构建项目

c、学习陡峭度对比

在指令与组件方面,Vue中将指令和组件分得更清晰。指令只封装 DOM 操作,而组件代表一个自给自足的独立单元,有自己的视图和数据逻辑。在 Angular1 中两者有不少相混的地方。在API与框架设计方面,angular1都比vue要复杂的多。就个人感觉而言,angular1和React的学习曲线会相对陡峭一些,而vue的编码方式会更趋近于前端开发者的编程习惯。

d、渲染能力对比

ReactNative能使你用相同的组件模型编写有本地渲染能力的 APP(iOS 和 Android)。能同时跨多平台开发,对开发者是非常棒的。为了弥补这方面的不足,在2016年9月举办的JSConf2016期间,vue.js的作者尤雨溪宣布加盟Weex团队担任技术顾问,双方将进行更紧密的合作,共建开发生态圈。Weex 是阿里的跨平台用户界面开发框架,Weex 的 JavaScript 框架运行时用的就是 Vue。在此之后,在 Weex 的帮助下,使用 Vue 语法开发的组件不仅仅可以运行在浏览器端,还能被用于开发 iOS 和 Android 上的原生应用。

e、vue的缺点

vue的影响力相比于angular和react还差的很远

2、vue全家桶及项目架构

Vue有著名的全家桶系列,包含了

vue-router(http://router.vuejs.org),

vuex(http://vuex.vuejs.org),

vue-resource(https://github.com/pagekit/vue-resource)。

再加上构建工具vue-cli,就是一个完整的vue项目的核心构成。

a、vue-router路由

推荐使用npm工具来安装vue-router

npm install vue-router

导入模块

import Vue from’vue’

importRouter from’vue-router’

Vue.use(Router); // 需要import Vue和Router,不然会报错undefined

导入自定义模块(组件)

import Goods from ‘@/components/goods/goods’;

通过const router= new VueRouter()来定义一个路由,并传入对应的配置,包括路径path和组件components。

e7ffa5947d52b19d08f078f19b9d1ae3.png

在使用new Vue来创建和挂载vue根实例的时候,

711b9f1da02707a35194b59071dd0f36.png

记得要通过 router配置参数注入路由,即在router中export出来的路由对象,从而让整个应用都有路由功能。

5fd002536b215766a1745e0af28a43d0.png

b、vuex状态管理

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。

它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化

Vuex 的四个核心概念分别是

  • The state tree:Vuex 使用单一状态树,用一个对象就包含了全部的应用层级状态。至此它便作为一个『唯一数据源(SSOT)』而存在。这也意味着,每个应用将仅仅包含一个 store 实例。单状态树让我们能够直接地定位任一特定的状态片段,在调试的过程中也能轻易地取得整个当前应用状态的快照。
  • Getters:用来从 store 获取 Vue 组件数据。
  • Mutators:事件处理器用来驱动状态的变化。
  • Actions:可以给组件使用的函数,以此用来驱动事件处理器 mutations

Vuex和简单的全局对象是不同的,当Vuex从store中读取状态值的时候,若状态发生了变化,那么相应的组件也会高效的更新。并且,改变store中状态的唯一途径就是提交commit mutations。这样便于我们跟踪每一次状态的变化。只要发生了状态的变化,一定伴随着mutation的提交

vuex例子:

58a6ed31f4a239a70035024967900c2f.png

通过 store.state 来获取状态对象,以及通过 store.commit 方法触发状态变更

a6a939ef1a88984ead518f525ddc7d66.png

c、Vue-resource

Vue-resource有体积小,支持IE9以上的浏览器,支持promise特性的特点

npm install vue-resource

1e26c0d1a561d878a8821281a5d85380.png

vue-resource的请求API是按照REST风格设计的,它提供了7种请求API:

· get(url,[options])

· head(url,[options])

· delete(url,[options])

· jsonp(url,[options])

· post(url,[body], [options])

· put(url, [body],[options])

· patch(url,[body], [options])

3、vue项目的大概结构

bd95bf3ad966d8a39494df8439fe1c89.png
  • components/文件夹用来存放Vue 组件。个人建议,把每一个组件中使用到的image图片放置到对应的组件子文件目录下,便于统一的管理
  • vuex/文件夹存放的是和 Vuex store 相关的东西(state对象,actions,mutations)
  • router/文件夹存放的是跟vue-router相关的路由配置项
  • build/文件是 webpack 的打包编译配置文件
  • static/文件夹存放一些静态的、较少变动的image或者css文件
  • config/文件夹存放的是一些配置项,比如服务器访问的端口配置等
  • dist/该文件夹一开始是不存在,在我们的项目经过 build 之后才会产出
  • App.vue根组件,所有的子组件都将在这里被引用
  • index.html整个项目的入口文件,将会引用我们的根组件 App.vue
  • main.js入口文件的 js 逻辑,在webpack 打包之后将被注入到 index.html 中

4、vue中less的应用

e75808531a901ebb47c065445b40b7a9.png

在vue项目中一样可以使用less预编译,只是需要使用npm安装less-loader插件。安装完成后,在vue中的css模块进行简单的配置,这样就可以直接使用less来编写样式表了。在打包编译的时候,会自动生成对应的css样式。

a、计算属性

购物车结算场景,用户选中商品的总金额是根据商品数量、选中商品种类数

和商品单价来变化的

c27a19bc237bdf9b43834ef9d633ecc6.png
c2218a8ea1cb51839c4e24706948e5a3.png

只需要使用{{totalPrice}}这个计算属性就可以来表示最终的商品总额

不需要关注这个变量的数值变化,totalPrice这个变量的逻辑写在对应的computed计算属性中

计算属性是基于它的依赖进行缓存的

计算属性只有在它的相关依赖发生变化时才会重新计算求值

在本例中,只有当选择商品的价格price和数量count发生变化时,这个计算属性totalPrice才会重新计算新的值。这就意味着,只要totalPrice这个值没有发生变化,多次访问该计算属性会立即返回之前的计算结果,而不必再次执行计算

b、模版语法

允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据

所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML 解析器解析

Vue的模版语法包括了使用双大括号插入文本、使用v-html插入纯HTML内容、使用v-bind插入对象、类似angular的v-if、v-show、v-for指令、以及过滤器等等

c、组件化

组件(Component)是 Vue.js 最强大的功能。组件可以封装可重用的代码,通过传入对象的不同,实现组件的复用。

组件实例的作用域是孤立的。

这意味着不能在子组件的模板内直接引用父组件的数据。

要让子组件使用父组件的数据,我们需要通过子组件的props选项。

如本例所示,子组件star要显式的使用props选项声明它期待获得的数据。

在这里就是指的“size”和“score”两个变量。

我们可以通过父级给子组件star传入大小和数值这两个对象,来实现对子组件的定制化。

de25f56e7f5e4d718ae4dd36c8beafac.png
7adf26f03d4ddfd8584a479fe20a1a8f.png

d、过渡效果

Vue 在插入、更新或者移除 DOM 时,提供多种不同方式的应用过渡效果,可以用简单的几行代码实现酷炫的过渡效果。

Vue 提供了 transition 的封装组件,在使用v-if、v-show等方法使得transition内部dom元素发生变化时,可以给任何元素和组件添加 entering/leaving 过渡。

当v-show中内容发生变化时,transition组件中的元素会发生状态的改变,在应用了transition封装后,Vue会自动识别目标元素是否应用了CSS过渡效果动画,如果有,会在合适的时机添加 entering/leaving的class来实现该过渡效果。

需要将想实现过渡效果的元素放在transition标签中包裹,通过name=“slide-fade”来声明过渡效果名称,并在对应的vue文件中添加过渡效果的css样式,这样就可以简单的完成该元素的过渡效果

9590d75ecf9b99a02e43f546ca7b8090.png
5c12f621430874a5dd71a7ec6fd9acc8.png

参考文章:https://www.jianshu.com/p/ee314786f7c8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值