vue translate peoject实现在线翻译功能【新手必看】


Posted in Javascript onJune 07, 2018

 开始

这是一适合新手练习的小项目,一个在线翻译的demo。

vue translate peoject实现在线翻译功能【新手必看】

在正式开始前,先??乱幌拢?且晃煌?迅?业慕ㄒ椋?褪遣灰?啃凶榧??奈侍 开始做Vue时我们可能会喜欢拆很多组件出来 但记住组件是为了复用(常见如公共菜单按钮栏等) 如非能够复用的情况其实并不用真的拆出组件来 。

当然,这个项目里因为是练手,所以强行组件化来涉及更多的vue用法。

目录结构

src下新建了两个文件:TranslateForm.vue表单组件和TranslateText.vue翻译结果组件

vue translate peoject实现在线翻译功能【新手必看】

涉及的语法

  • 指令:v-model,v-on,v-bind
  • 父子组件通信:$emit,props
  • 动态更新数据:vm.$set
  • 翻译服务的API,我这里用的是有道翻译的api

——————————————————————————————分割线————————————————————————

TranslateForm.vue
<template>
 <div>
 <!--加上页面修饰符,提交时就不回再重载页面-->
 <form v-on:submit.prevent="formSubmit">
  <input type="text" v-model="text" placeholder="输入需要翻译的内容"/>
  <select v-model="to">
  <option value ="en">英文</option>
  <option value ="ko">韩文</option>
  <option value ="fr">法文</option>
  <option value ="ru">俄文</option>
  </select>
  <input type="submit" value="翻译"/>
 </form>
 </div>
</template>
<script>
export default {
 name: 'TranslateForm',
 data: function () {
 return {
  text: '',
  to: 'en'
 }
 },
 methods: {
 formSubmit: function () {
  this.$emit('formSubmit', this.text, this.to)
 }
 }
}
</script>
<style></style>

这里没啥好说的,text和to两个变量分别是要翻译的文字和翻译语言的选项,this.$emit把数据传给父组件使用

根组件APP

<template>
 <div id="app">
 <h2>简单翻译</h2><span>简单/易用/便捷</span>
 <TranslateForm v-on:formSubmit="textTranslate"></TranslateForm>
 <TranslateText :translated-text="translatedText"></TranslateText>
 </div>
</template>
<script>
import TranslateForm from './components/TranslateForm.vue'
import TranslateText from './components/TranslateText.vue'
import md5 from 'blueimp-md5'
import $ from 'jquery'

export default {
 name: 'App',
 data: function () {
 return {
  translatedText: '2',
  appKey: '47bb6e424790df89',
  key: 'NH2VxBadIlKlT2b2qjxaSu221dSC78Ew',
  salt: (new Date()).getTime(),
  from: '',
  to: 'en'
 }
 },
 components: {
 TranslateForm, TranslateText
 },
 methods: {
 textTranslate: function (text, to) {
  let vm = this
  $.ajax({
  url: 'http://openapi.youdao.com/api',
  type: 'post',
  dataType: 'jsonp',
  data: {
   q: text,
   appKey: this.appKey,
   salt: this.salt,
   from: this.from,
   to: to,
   sign: md5(this.appKey + text + this.salt + this.key)
  },
  success: function (data) {
   vm.$set(vm.$data, 'translatedText', data.translation[0])
  }
  })
 }
 }
}
</script>
<style>
 #app {
 font-family: 'Avenir', Helvetica, Arial, sans-serif;
 -webkit-font-smoothing: antialiased;
 -moz-osx-font-smoothing: grayscale;
 text-align: center;
 color: #2c3e50;
 margin-top: 60px;
 }
</style>

1、父组件拿到子组件传来的数据后开始通过api来请求数据
2、我用的是有道api http://ai.youdao.com/login.s api文档里对于api的使用已经很详细了,我在这里是第一次使用api,没觉得难
3、需要自己安装两个依赖:一个是jquery由于ajax请求api,一个是blueimp-md5在请求api时会用到里面的md5()
4、用vue.set将得到的结果绑定到translatedText这个变量,在这一步的时候我踩了两个坑

第一个坑:习惯了以前的写法,直接就这样给变量赋值,结果变量的值并未改变,这时我还不知到有Vue.set这个语法,后面百度才知道的(不认真看文档的下场)

success: function (data) {
   this.translatedText = data.translation[0]
   console.log(this.translatedText)
  }

第二个坑:照着文档来写,然后报错了:this.$set is not a function,这里报错是因为success这个函数里的this指向的不是当前的VueModel     

success: function (data) {
   this.$set(this.$data, 'translatedText', data.translation[0])
  }

所以我在前面定义了一个vm变量来充当当前Model,然后就不报错了。

TranslateText.vue
<template>
 <div id="TranslateText">
 <p>{{translatedText}}</p>
 </div>
</template>
<script>
export default {
 name: 'TranslateText',
 props: [
 'translatedText'
 ]
}
</script>
<style></style>

props接收父组件传值来使用

最后

这个文章我自己看了一下,写的确实不好,许多地方不通顺,希望大家多多包涵

代码我上传到github了 https://github.com/Zone-F/vue... (没加样式)

以上所述是小编给大家介绍的vue translate peoject实现在线翻译功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jquery.simple.tree插件 更简单,兼容性更好的无限树插件
Sep 03 Javascript
基于Jquery实现表格动态分页实现代码
Jun 21 Javascript
Javascript中innerHTML用法实例分析
Jan 12 Javascript
JavaScript中实现map功能代码分享
Jun 11 Javascript
JavaScript结合Bootstrap仿微信后台多图文界面管理
Jul 22 Javascript
Bootstrap Table表格一直加载(load)不了数据的快速解决方法
Sep 17 Javascript
JavaScript给每一个li节点绑定点击事件的实现方法
Dec 01 Javascript
jQuery修改DOM结构_动力节点Java学院整理
Jul 05 jQuery
纯javascript前端实现base64图片下载(兼容IE10+)
Sep 14 Javascript
js实现选项卡效果
Mar 07 Javascript
解决vue init webpack 下载依赖卡住不动的问题
Nov 09 Javascript
Vue实现省市区三级联动
Dec 27 Vue.js
JavaScript 正则命名分组【推荐】
Jun 07 #Javascript
详解create-react-app 自定义 eslint 配置
Jun 07 #Javascript
vue.js实现标签页切换效果
Jun 07 #Javascript
js数组去重的N种方法(小结)
Jun 07 #Javascript
vue+axios新手实践实现登陆的示例代码
Jun 06 #Javascript
vue2.0实现音乐/视频播放进度条组件
Jun 06 #Javascript
vue实现简单loading进度条
Jun 06 #Javascript
You might like
发布一个用PHP fsockopen写的HTTP下载的类
2007/02/22 PHP
php下实现一个阿拉伯数字转中文数字的函数
2008/07/10 PHP
PHP 获取远程文件内容的函数代码
2010/03/24 PHP
PHP屏蔽关键字实现方法
2016/11/17 PHP
简单谈谈PHP面向对象之标识对象
2017/06/27 PHP
PHP中strtr与str_replace函数运行性能简单测试示例
2019/06/22 PHP
JS分页控件 可用于无刷新分页
2013/07/23 Javascript
javascript结合Canvas 实现简易的圆形时钟
2015/03/11 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
2016/06/12 Javascript
深入理解js中的加载事件
2017/02/08 Javascript
Vue打包后出现一些map文件的解决方法
2018/02/13 Javascript
微信小程序自定义toast组件的方法详解【含动画】
2019/05/11 Javascript
python实现ftp客户端示例分享
2014/02/17 Python
简单介绍Python下自己编写web框架的一些要点
2015/04/29 Python
python对象及面向对象技术详解
2016/07/19 Python
python爬虫_微信公众号推送信息爬取的实例
2017/10/23 Python
Python如何实现MySQL实例初始化详解
2017/11/06 Python
解决Pycharm后台indexing导致不能run的问题
2019/06/27 Python
Python Opencv任意形状目标检测并绘制框图
2019/07/23 Python
详解Django定时任务模块设计与实践
2019/07/24 Python
最新2019Pycharm安装教程 亲测
2020/02/28 Python
python实现IOU计算案例
2020/04/12 Python
python实现手势识别的示例(入门)
2020/04/15 Python
Python flask框架实现查询数据库并显示数据
2020/06/04 Python
Python进行特征提取的示例代码
2020/10/15 Python
python3 kubernetes api的使用示例
2021/01/12 Python
HTML5实现自带进度条和滑块滑杆效果
2018/04/17 HTML / CSS
俄罗斯皮肤健康中心:Pharmacosmetica.ru
2020/02/22 全球购物
师范生自我鉴定范文
2013/10/05 职场文书
证券期货行业个人的自我评价
2013/12/26 职场文书
小学生评语集锦
2014/04/18 职场文书
传承焦裕禄精神思想汇报2014
2014/09/10 职场文书
如何用python绘制雷达图
2021/04/24 Python
继承Win10缺点!教你关闭Win11烦人的网络搜索
2021/11/23 数码科技
Redis集群节点通信过程/原理流程分析
2022/03/18 Redis
《总之就是很可爱》新作短篇动画《总之就是很可爱~制服~》将于2022年夏天播出
2022/04/07 日漫