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 指南/入门基础
Nov 30 Javascript
JavaScript OOP类与继承
Nov 15 Javascript
PHP开发者必须掌握的6个关键字
Apr 14 Javascript
JS验证全角与半角及相互转化的介绍
May 18 Javascript
Node.js readline 逐行读取、写入文件内容的示例
Mar 01 Javascript
微信小程序视图控件与bindtap之间的问题的解决
Apr 08 Javascript
vue前端框架—Mint UI详解(更适用于移动端)
Apr 30 Javascript
在vue项目中使用codemirror插件实现代码编辑器功能
Aug 27 Javascript
layui 选择列表,打勾,点击确定返回数据的例子
Sep 02 Javascript
实例分析JS中的相等性判断===、 ==和Object.is()
Nov 17 Javascript
详解Node.JS模块 process
Aug 31 Javascript
WebStorm无法正确识别Vue3组合式API的解决方案
Feb 18 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判断服务器是否是HTTPS连接
2013/07/05 PHP
Laravel 中获取上一篇和下一篇数据
2015/07/27 PHP
如何使用PHP Embed SAPI实现Opcodes查看器
2015/11/10 PHP
thinkPHP5框架自定义验证器实现方法分析
2018/06/11 PHP
jquery原创弹出层折叠效果点击折叠弹出一个层
2014/03/12 Javascript
JavaScript中的console.trace()函数介绍
2014/12/29 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
jQuery实现的输入框选择时间插件用法实例
2015/02/28 Javascript
JavaScript设置获取和设置属性的方法
2015/03/04 Javascript
js倒计时抢购实例
2015/12/20 Javascript
javascript实现PC网页里的拖拽效果
2016/03/14 Javascript
jQuery实现根据滚动条位置加载相应内容功能
2016/07/18 Javascript
JavaScript转换数据库DateTime字段类型方法
2017/06/27 Javascript
input 标签实现输入框带提示文字效果(两种方法)
2017/10/09 Javascript
详解vue mixins和extends的巧妙用法
2017/12/20 Javascript
ES6使用export和import实现模块化的方法
2018/09/10 Javascript
Python 递归函数详解及实例
2016/12/27 Python
详解python函数传参是传值还是传引用
2018/01/16 Python
pyqt5的QComboBox 使用模板的具体方法
2018/09/06 Python
Python中的函数式编程:不可变的数据结构
2018/10/08 Python
Python Dict找出value大于某值或key大于某值的所有项方式
2020/06/05 Python
python使用scapy模块实现ARP扫描的过程
2021/01/21 Python
浅析CSS3 中的 transition,transform,translate之间区别和作用
2020/03/26 HTML / CSS
美国创意礼品网站:UncommonGoods
2017/02/03 全球购物
英国网上电器商店:Electricshop
2020/03/15 全球购物
村官学习十八大感想
2014/01/15 职场文书
工程专业应届生求职信
2014/02/19 职场文书
就业意向书范文
2014/04/01 职场文书
大学生社会实践方案
2014/05/11 职场文书
大学生党员自我剖析材料
2014/10/06 职场文书
学生上课说话检讨书
2014/10/25 职场文书
2014年组织部工作总结
2014/11/14 职场文书
学前班学生评语
2014/12/29 职场文书
大学生团日活动总结
2015/05/06 职场文书
观后感格式
2015/06/19 职场文书
Android基础入门之dataBinding的简单使用教程
2022/06/21 Java/Android