您好,登錄后才能下訂單哦!
開始
這是一適合新手練習的小項目,一個在線翻譯的demo。
在正式開始前,先啰嗦一下,是一位網友給我的建議,就是不要強行組件化的問題 開始做Vue時我們可能會喜歡拆很多組件出來 但記住組件是為了復用(常見如公共菜單按鈕欄等) 如非能夠復用的情況其實并不用真的拆出組件來 。
當然,這個項目里因為是練手,所以強行組件化來涉及更多的vue用法。
目錄結構
src下新建了兩個文件:TranslateForm.vue表單組件和TranslateText.vue翻譯結果組件
涉及的語法
——————————————————————————————分割線————————————————————————
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"> <h3>簡單翻譯</h3><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實現在線翻譯功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。