vue 后台翻译_Vue 新手小项目 vue-translate-peoject 在线翻译功能

这是一个适合Vue初学者的项目,实现了一个简单的在线翻译功能。通过Vue组件化,利用有道翻译API进行文本翻译。项目中涉及v-model、v-on、v-bind等指令,父子组件通信以及动态数据更新。遇到的问题包括正确使用Vue.set更新数据和在AJAX回调中处理this的指向。
摘要由CSDN通过智能技术生成

开始

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

在正式开始前,先啰嗦一下,是一位网友给我的建议,就是不要强行组件化的问题 开始做Vue时我们可能会喜欢拆很多组件出来 但记住组件是为了复用(常见如公共菜单按钮栏等) 如非能够复用的情况其实并不用真的拆出组件来 。

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

目录结构

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

涉及的语法

指令:v-model,v-on,v-bind

父子组件通信:$emit,props

动态更新数据:vm.$set

翻译服务的API,我这里用的是有道翻译的api

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

TranslateForm.vue

英文

韩文

法文

俄文

export default {

name: 'TranslateForm',

data: function () {

return {

text: '',

to: 'en'

}

},

methods: {

formSubmit: function () {

this.$emit('formSubmit', this.text, this.to)

}

}

}

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

根组件APP

简单翻译

简单/易用/便捷

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])

}

})

}

}

}

#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;

}

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

{{translatedText}}

export default {

name: 'TranslateText',

props: [

'translatedText'

]

}

props接收父组件传值来使用

最后

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

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

还有就是这个我是在腾讯课堂里的课程里学的:https://ke.qq.com/course/2275...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值