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 事件执行检测代码
Dec 09 Javascript
jQuery 源码分析笔记(2) 变量列表
May 28 Javascript
解析Javascript中中括号“[]”的多义性
Dec 03 Javascript
浅谈Javascript 执行顺序
Dec 18 Javascript
jquery使用append(content)方法注意事项分享
Jan 06 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
Feb 17 Javascript
javascript数组排序汇总
Jul 07 Javascript
Javascript typeof与instanceof的区别
Oct 18 Javascript
Node.js中看JavaScript的引用
Apr 22 Javascript
微信小程序实现瀑布流布局与无限加载的方法详解
May 12 Javascript
JavaScript实现获取用户单击body中所有A标签内容的方法
Jun 05 Javascript
layer.open 按钮的点击事件关闭方法
Aug 17 Javascript
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入门
2006/10/09 PHP
php运行出现Call to undefined function curl_init()的解决方法
2010/11/02 PHP
php实现的中秋博饼游戏之绘制骰子图案功能示例
2017/11/06 PHP
使用laravel指定日志文件记录任意日志
2019/10/17 PHP
JavaScript setTimeout和setInterval的使用方法 说明
2010/03/25 Javascript
JSONP跨域的原理解析及其实现介绍
2014/03/22 Javascript
JavaScript中的this使用详解
2016/07/27 Javascript
关于ES6的六个小特性(二)
2017/02/20 Javascript
Node.js安装配置图文教程
2017/05/10 Javascript
微信小程序使用Promise简化回调
2018/02/06 Javascript
Angular 向组件传递模板的两种方法
2018/02/23 Javascript
Webpack打包字体font-awesome的方法示例
2018/04/26 Javascript
python模拟登陆Tom邮箱示例分享
2014/01/13 Python
使用Python编写类UNIX系统的命令行工具的教程
2015/04/15 Python
python数字图像处理实现直方图与均衡化
2018/05/04 Python
python 实现倒排索引的方法
2018/12/25 Python
python获取本机所有IP地址的方法
2018/12/26 Python
python批量读取文件名并写入txt文件中
2020/09/05 Python
python PIL/cv2/base64相互转换实例
2020/01/09 Python
Scrapy中如何向Spider传入参数的方法实现
2020/09/28 Python
Python文件操作及内置函数flush原理解析
2020/10/13 Python
python中使用asyncio实现异步IO实例分析
2021/02/26 Python
Python字节单位转换(将字节转换为K M G T)
2021/03/02 Python
用CSS3的box-reflect设置文字倒影效果的方法讲解
2016/03/07 HTML / CSS
具有防紫外线功能的高性能钓鱼服装:Hook&Tackle
2018/08/16 全球购物
C#面试题问题集
2016/04/02 面试题
产品质量承诺范本
2014/03/31 职场文书
心理咨询承诺书
2014/05/20 职场文书
2015年员工试用期工作总结
2014/12/12 职场文书
2015年检察院个人工作总结
2015/05/20 职场文书
商务英语邮件开头问候语
2015/11/10 职场文书
2019年大学毕业生个人自我鉴定范文大全
2019/03/21 职场文书
2019年健身俱乐部的创业计划书
2019/08/26 职场文书
公文写作:工伤事故分析报告怎么写?
2019/11/05 职场文书
go语言-在mac下brew升级golang
2021/04/25 Golang
python垃圾回收机制原理分析
2022/04/13 Python