解决方案:可能是目前最完整的前端框架 Vue.js 全面介绍
优采云 发布时间: 2022-11-08 15:31解决方案:可能是目前最完整的前端框架 Vue.js 全面介绍
Vue.js 是一个 JavaScript MVVM 库,一个用于构建用户界面的渐进式框架。
概括
近两年国内最火的前端框架是Vue.js。很多用过vue的程序员评论说,“vue.js结合了angular.js和react.js的优点,把它们的缺点都去掉了。” . 获得如此高评价的 vue.js 也是中国人在开源界的骄傲,因为它的作者是中国人——尤文。
Vue.js 是一个 JavaScript MVVM 库,一个用于构建用户界面的渐进式框架。它采用数据驱动和组件化思维构建,采用自下而上的增量开发设计。与 Angular.js 相比,Vue.js 提供了更简洁、更易于理解的 API,让我们可以快速上手和使用 Vue.js。
调试插件
vue调试方面,可以选择安装chrome插件vue Devtools。打开vue项目,在console控制台中选择vue面板。在 Devtools 工具中,可以选择一个组件来查看对应组件中的数据信息。也可以选择Vuex选项查看项目中Vuex的状态变量信息。
UI组件库
在vue组件库方面,我个人不推荐使用UI组件库。毕竟自己造轮子的过程还是很充实的。当然,如果你更注重开发效率,选择vue2.0作为前端框架,那么饿了么推出的Element组件是一个非常不错的选择。它的github项目()更新频繁,虽然项目会有点不稳定,但是目前element是支持vue2.0的最好的UI组件。正如它的口号,“快速成型,只为让你少加班”。
Vue、React、Angular1 比较
性能比较
在 Angular1 中,scope 范围内的每一次数据变化都会触发 watcher 的重新计算。Angular封装了常用的dom事件、xhr事件等,触发进入angular的digest过程。在digest过程中,会从rootscope开始遍历,检查所有watchers。此外,如果某些观察者触发另一个更新,脏循环可能会运行多次。Vue 不存在这个问题,因为它使用了基于依赖跟踪的观察系统和异步队列更新,并且数据更改是独立惩罚的,除非数据之间存在显式依赖关系。
Vue 官方宣称 Vue 的渲染性能优于 React。为了合理和有说服力,vue 开发团队构建了一个简单的性能对比项目( ),负责将 10000 个列表项渲染 100 次。Vue官方对每个参考项目运行20次,取最佳结果如下图:
可以看出Vue的性能比Angular1好很多,比React略好。
社区外展比较
Google 落后于 Angular 1,因此社区基础无需担心,从 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,甚至还有一个路由库,让您可以非常轻松地构建项目。
学习陡度对比
在指令和组件方面,Vue 对指令和组件的划分更加清晰。指令仅封装 DOM 操作,而组件表示一个自收录的自收录单元,具有自己的视图和数据逻辑。在 Angular 1 中,两者之间存在很多混淆。在 API 和框架设计方面,angular1 比 vue 复杂得多。从个人角度来看,angular1和React的学习曲线会比较陡峭,vue的编码方式会更贴近前端开发者的编程习惯。
因为Vue的作者是中国人,Vue的官方网站,教程和API绝对是最全最通俗易懂的。此外,每个主要版本发布都会附有详细的迁移文档,包括许多详细的解释、许多迁移示例,甚至是迁移工具。不要让 Angular 开发团队脸红……
Vue的使用很简单,创建一个本地的.html文件,然后导入Vue,如下:
这样就生成了vue的hello world应用。
渲染能力比较
ReactNative 使您能够使用相同的组件模型编写本机渲染的应用程序(iOS 和 Android)。能够同时跨多个平台进行开发对开发人员来说非常棒。为了弥补这一不足,在 2016 年 9 月举行的 JSConf2016 期间,vue.js 的作者游禹锡宣布加入 Weex 团队担任技术顾问。双方将更加紧密合作,共建发展生态。
Weex 是阿里跨平台的用户界面开发框架。Weex 的 JavaScript 框架使用 Vue 运行时。之后,在 Weex 的帮助下,使用 Vue 语法开发的组件不仅可以运行在浏览器端,还可以用于开发 iOS 和 Android 上的原生应用。
Vue.js 的作者 Yuxi You 说:“Weex 选择 Vue 作为它的 JavaScript 运行时框架是一件让我很高兴的事情。Vue 的组件开发模式已经得到了 web 开发者社区的广泛认可,并且 Vue 的开发经验扩展到原生平台是我一直想做但没有精力去做的事情。我很高兴 Weex 将允许开发人员使用 Vue 的语法编写跨 Web/Android/iOS 的通用组件。”
vue的缺点
Vue这么好,没有缺点吗?当然,虽然 Vue 在 2016 年很火,但相比 Angular 和 React,无论是成熟度还是社区活跃度都不是对手。此外,Vue 明确表示它放弃了对 IE8 的支持。看现在的招聘网站,写多少需要Angular经验,写多少需要Vue经验,可见Vue的影响力远不如Angular和React。
Vue 全家桶和项目架构
Vue有一个著名的家庭桶系列,包括vue-router()、vuex()、vue-resource()。再加上构建工具vue-cli,是一个完整vue项目的核心组件。
vue-router 路由
推荐使用npm工具安装vue-router
npm 安装 vue-router
通过 import 导入并定义要使用的 Vue 模块、vue-router 模块和组件,在本例中分别为 Goods、Ratings 和 Seller 组件。最后,如果你在模块化项目中使用它,你必须通过 Vue.use() 显式安装路由功能。
从 'vue' 导入 Vue
从'vue-router'导入路由器
从“@/components/goods/goods”导入商品;
从“@/components/ratings/ratings”导入评级;
从“@/components/seller/seller”导入卖家;
Vue.use(路由器); // 需要导入Vue和Router,否则会报undefined的错误
通过 const router= new VueRouter() 定义一个路由,并传入相应的配置,包括路径路径和组件组件。
最后,在使用newVue创建和挂载vue根实例的时候,记得通过router配置参数注入路由,也就是router中导出的路由对象,这样整个应用程序才有路由功能。
vuex状态管理
Vuex 是为 Vue.js 应用程序开发的状态管理模式。它使用集中式存储来管理应用程序所有组件的状态,并使用相应的规则来确保状态以可预测的方式变化。前面提到,Vuex已经集成到Vue官方调试工具vue Devtools中,方便大家在项目中查看Vuex的状态变化。
假设有这样一个场景:我们的项目比较大,有多个父组件,每个父组件又收录多个子组件。如何时刻保持跟踪将变得困难。哪个事件由哪个组件调度,哪个组件应该*敏*感*词*哪个事件?父组件与子组件的耦合度会越来越高,因为它需要显式地调度和*敏*感*词*子组件的某些事件。项目逻辑分散在各个组件之间,很容易导致逻辑混乱,不利于我们项目的维护。
这就是 Vuex 旨在解决的问题。Vuex 的四个核心概念是:
状态树:Vuex 使用单个状态树,其中收录所有应用程序级状态和单个对象。到目前为止,它作为“单一数据源 (SSOT)”存在。这也意味着每个应用程序将只收录一个商店实例。单状态树允许我们直接定位任何特定的状态,并在调试时轻松获取整个当前应用程序状态的快照。
Getters:用于从 store 中获取 Vue 组件数据。
Mutators:事件处理程序用于驱动状态更改。
动作:组件可以用来驱动事件处理程序突变的函数
Vuex 不同于简单的全局对象。当 Vuex 从 store 中读取 state 值时,如果 state 发生变化,相应的组件会高效更新。此外,更改存储中状态的唯一方法是提交突变。这使我们能够跟踪每个状态变化。只要有状态变化,就必须伴随着提交突变。
我们来看一个最简单的 vuex 例子:
安装完 Vuex 之后,让我们创建一个商店。创建过程很简单——只需提供一个初始状态对象和一些突变:
现在,您可以通过 store.state 获取状态对象并通过 mit 方法触发状态更改:
vue-resource简介
Vue-resource具有体积小的特点,支持IE9以上浏览器,支持promise特性。也推荐使用 npm 安装 Vue-resource。
$ npm install vue-resource
安装并引入 vue-resource 后,可以基于全局 Vue 对象使用 http,也可以基于 Vue 实例使用 http。
发送请求后,使用 then 方法处理响应结果。then方法有两个参数,第一个参数是响应成功时的回调函数,第二个参数是响应失败时的回调函数。
vue-resource 的请求 API 采用 REST 风格设计,提供了 7 种请求 API:
获取(网址,[选项])
头(网址,[选项])
删除(网址,[选项])
· jsonp(url,[选项])
· post(url, [body], [options])
放(网址,[正文],[选项])
补丁(网址,[正文],[选项])
vue项目目录结构
下图是一个简单的vue项目的大体结构。下面简单介绍一下每个文件夹中一般存放哪些内容。
components/ 文件夹用于存放 Vue 组件。个人建议,把各个组件使用的图片图片放到对应的组件子文件目录下,方便统一管理
Node_modules/npm安装的项目的依赖库
vuex/ 文件夹存储与 Vuex 存储相关的东西(状态对象、动作、突变)
router/文件夹存放vue-router相关的路由配置项
build/文件是webpack的打包编译配置文件
static/ 文件夹存储一些静态的、变化较少的图像或 css 文件
config/文件夹中存放了一些配置项,比如服务器访问的端口配置等。
dist/文件夹一开始是不存在的,只有在我们的项目建好后才会产生
App.vue 根组件,这里会引用所有子组件
整个项目的入口文件index.html会引用我们的根组件App.vue
main.js入口文件的js逻辑会在webpack打包后注入到index.html中
少在vue中的应用
也可以在vue项目中使用less预编译,但是需要使用npm安装less-loader插件。安装完成后,简单配置vue中的css模块,这样就可以直接用less来写样式表了。打包编译时会自动生成对应的css样式。
Vue和例子讲解Vue的核心功能
Vue的功能很多,很难详细解释。下面结合工作中的项目示例,结合代码对Vue的几个核心功能进行讲解。
计算属性
假设有如下购物车结算场景。用户选择的产品总数量根据产品的数量、选择的产品类型的数量和产品的单价而有所不同。但是,数量、选择种类的数量、单价等对象都是根据用户的选择动态变化的。如果使用前端模板来计算最终的商品总量,这些动态变化的变量(商品数量、商品单价、选择商品类型),会让这个逻辑变得复杂且难以维护。在这种情况下,模板不再简洁明了。Vue 为这种场景提供了解决方案。在任何复杂的逻辑中,Vue 建议使用计算属性。
如上图所示,在html中,我们只需要使用{{totalPrice}}计算属性来表示最终的商品总金额即可。我们不需要关注这个变量的值变化。变量 totalPrice 的逻辑写在对应的计算属性中。
可能会有疑问,这个计算属性是不是类似于定义一个方法?两者最大的区别是计算属性是根据其依赖关系缓存的。计算属性仅在其关联的依赖项发生更改时才会重新评估。在此示例中,计算属性 totalPrice 仅在所选商品的价格和数量发生变化时才会重新计算新值。这意味着只要 totalPrice 的值没有改变,多次访问计算属性将立即返回之前的计算结果,而无需再次执行计算。
模板语法
Vue.js 使用基于 HTML 的模板语法,允许开发人员以声明方式将 DOM 绑定到底层 Vue 实例的数据。所有 Vue.js 模板都是有效的 HTML,因此它们可以被符合规范的浏览器和 HTML 解析器解析。Vue 的模板语法包括用双花括号插入文本、用 v-html 插入纯 HTML 内容、用 v-bind 插入对象、angular-like v-if、v-show、v-for 指令和过滤器等。
组件化
组件是 Vue.js 最强大的特性。组件可以封装可复用的代码,通过传入不同的对象来实现组件的复用。
举个简单的组装例子,我们先写一个star组件,就是一个普通的star.vue文件。它的作用就是简单的实现一个五角星。
如何在其他vue文件中使用这个star组件?如下图,首先通过import导入star组件对象,在vue文件中声明注册要使用star组件的star组件。现在你可以通过标签在vue文件的任何地方愉快地使用star组件了。在要显示五角星的地方,使用星标,这很容易做到。
组件实例的范围是孤立的。这意味着父组件的数据不能在子组件的模板中直接引用。为了让子组件使用父组件的数据,我们需要传递子组件的 props 选项。如本例所示,子组件 star 必须使用 props 选项显式声明它期望的数据。这里指的是“size”和“score”这两个变量。我们可以通过将大小和值这两个对象从父组件传递给子组件star来自定义子组件。
过渡效应
Vue 提供了多种不同的方式来在插入、更新或移除 DOM 时应用过渡效果。您可以通过几行简单的代码来实现酷炫的过渡效果。Vue 为转换提供了封装组件。当使用 v-if 、 v-show 等方法使转场内的 dom 元素发生变化时,可以为任何元素和组件添加进入/离开转场。
当 v-show 中的内容发生变化时,transition 组件中的元素会改变状态。应用过渡包后,Vue 会自动识别是否对目标元素应用了 CSS 过渡效果*敏*感*词*。如果是这样,那将是在正确的时间。添加进入/离开类来实现这个过渡效果。
下图显示了一个简单过渡效果的示例。需要将想要实现转场效果的元素包裹在transition标签中,通过name="slide-fade"声明转场效果的名称,并在对应的vue文件中添加转场效果的CSS样式,这样就可以简单的完成元素的过渡效果。
总结
据不完全统计,包括饿了么、稀土掘金、苏宁易购、美团、天猫、荔枝FM、房多多、Laravel、htmlBurger等*敏*感*词*知名企业都在使用vue进行新旧项目的开发. 项目的前端重构。
此外,vue + vuex + axios + vue-router + webpack + es6 + less的项目架构已经成为越来越多大公司的首选。
解决方案:自然语言关键词生成文章API接口请求
本文主要介绍自然语言原创文章生成的关键词和用于文章生成的接口 API,方便需要制作内容的用户调用。以下是逻辑和使用方法的介绍。
首先是逻辑原理,
原理是人工智能深度学习,关键词模型训练。这导致目标短语的相关输出,即关键词。核心技术不再解释,没那么容易。一时半不会允许力量。这次我主要转移了平台的接口,也就是叫我生成的接口。但是,该平台的界面是付费的。
平台调用文章后,将重新处理文章。获取格式化文章。可以直接连接网站进行发布。
#获取文章
@retry(stop_max_attempt_number=1,retry_on_result=lambda x: x is None,wait_fixed=2000)
def getArticle(self,keyword):
result = outputText(keyword)
print(result)
if result['code'] == 200:
print('获取文章成功')
# self.collection.update_one({'keyword':result['keyword']},{'$set': {'content':result['content']}},upsert=True)
# return result['keyword'],result['content']
return result
return 0
#处理文章
def handle_content(self, info):
content = info['content']
if len(content) < 300:return
endflag = re.search(r'\?|\?|\。|\!|\!',content[-1])
<p>
if not endflag:
endResult = self.getArticle(content[-6:])
if endResult:content += endResult['content']
# 去除开头符号
content = re.sub(r'^\W*?(?P\w)', self.extract_one, content, re.S)
# print(content)
# 去除文章中的\
content = re.sub(r'\\', '', content, re.S)
# print(content)
# 顿号、前数字是1234或一二三四,加br标签分段
content = re.sub(r'(?P\S)\s*?(?P、)',
self.extract_num, content, re.S)
# print(content)
# 句号、问号和感叹号后加br标签
content = re.sub(r'(?P\。|\?|\?|\!|\!)',
self.extract_hao, content, re.S)
# print(content)
# 两个顿号间的句号、问号和感叹号后不加br标签
content = re.sub(r'
\s*?
', '
', content, re.S)
# print(content)
info['content'] = content
print('文章处理成功')
return info</p>
个人接口继续用FLASK生成,主要将文章生成功能对接在FLASK中,通过接口地址请求生成文章。
@app.route('/nlp')
def nlp():
token = request.args.get('token','').strip()
keyword = request.args.get('keyword','').strip()
if not token: return '还没有输入token'
if not keyword:return '还没有输入关键词'
hinfo = Article(keyword).main()
item = NlpApi.objects(token=token).first()
count = item.count - 1
item.update(keyword=keyword,nlpcont=hinfo['content'],count=count)
return jsonify({
'关键词':keyword,
'nlp文章写作':hinfo['content'],
'剩余次数':count
})
此接口是一个 GET 请求。您只需要在浏览器中请求它,即可获取自然语言生成的文章。
这样,我们就可以轻松生成原创文章,这对将来的建网站和制作自媒体素材也起到了一定的作用,可以实现内容的积累。排水等功能。
如果需要此接口生成文章,则需要获取令牌参数。代币获取地址: 那么文章代计费方式简单粗暴,1美分/1条。如有必要,您可以在商城中获取令牌参数并自动发行令牌。