Vue实例demo——在线翻译

一、项目简介

学习Vue也有一段时间了,这几天使用Vue的相关知识完成了一个在线翻译的项目。项目整体上很简单,但是里面包含的一些知识还是很多的。如果你是一名Vue小白,建议你阅读这篇文章。通过参考这个项目,你可以了解从零开始搭建Vue项目,到最终的打包上线的完整过程。

真个项目中使用的技术栈如下:

  • 使用Vue脚手架快速搭建项目
  • 在Vue组件中引入外部的js脚本
  • 在Vue项目中引入jQuery库
  • 调用外部API,这里使用的是百度的翻译API
  • 组件之间的数据传递

最后展示一下这个项目。这是一个在线翻译的项目,可以通过选择,将中文翻译成英文,日文,俄文等其他语言。

二、项目的具体介绍

1.搭建项目,安装vue-resource,配置jQuery库

首先我们要做的是使用Vue脚手架搭建一个项目,因为我的这个项目中使用到了vue-resource组件和jQuery第三方库,所以建议你在完成项目搭建之后就安装vue-resource组件和配置jQuery,如果你不会配置jQuery,可以参考文章:Vue笔记——Vue组件中引入jQuery

2.申请并掌握百度翻译API接口

项目中使用到的百度提供的免费翻译API,如果之前没有使用过这个API,可以到百度翻译开放平台进行了解。

对百度提供的API不熟悉的同学,一定要沉下心来看一看他的技术文档。这个文档是很详细的,会跟你讲解如果使用API。大致的思路如下:

  1. 首先你要注册一个百度翻译开放平台的账号,然后申请开发者权限,获取一个APP ID和秘钥。

2.然后下载它的实例DEMO,百度翻译的API是需要给数据MD5加密的,所以在它的DEMO里面会有一个md5.js脚本文件,我们需要在组件中引入它对数据进行加密。如果你不知道如何在Vue组件中引入外部js脚本文件,可以参考文章:Vue笔记——在Vue项目中引入外部js文件

3.开始编写项目代码

上述准备工作做好之后,我们就可以进行编写我们的项目代码。

我这里使用到了两个子组件,其中一个子组件 translateForm 是用来接收用户输入的待翻译文字,以及用户选择的翻译模式。用户填写好这些信息之后,点击【翻译】,相关的数据就会传递到这个 translateForm 组件的父组件,也就是 App.vue 组件中。

translateForm 组件的主要代码:

<template>
    <div id="translateForm">

        <!-- 用户选择的翻译模式 -->
        <div class="option-box">
            <span class="option-result" v-on:click="showList">{{ option_result }}</span>
            <div class="option-list">
                <p v-for="(option,index) in option_list" v-on:click="selectOption(index)">{{ option }}</p>
            </div>
            <input type="button" value="翻译" v-on:click="my_translate()">
        </div>

        <!-- 用户输入的要翻译的文字 -->
        <form class="my-form">
            <textarea class="my-textarea" v-model="translating_text" placeholder="请输入要翻译的文字"
                      v-on:keydown.enter="my_translate"></textarea>
        </form>
    </div>
</template>


<script>
    import $ from 'jquery'

    export default {
        name: 'translateForm',
        data() {
            return {
                translating_text: "",
                language: "en",
                option_result: "中文 > 英文",
                option_list: ["中文 > 英文", "中文 > 日文", "中文 > 韩文", "中文 > 法文", "中文 > 泰文", "中文 > 德文", "中文 > 阿拉伯文", "中文 > 俄文", "中文 > 意大利文", "中文 > 丹麦文"],
                language_list: ["en", "jp", "kor", "fra", "th", "de", "ara", "ru", "it", "dan"]
            }
        },
        methods: {
            // 用户点击【翻译】,触发自定义事件,将数据传递给父组件
            my_translate: function () {
                this.$emit("my_submit", this.translating_text, this.language)
                event.preventDefault();
            },

            // 下使用jQuery库来个翻译选项加一些下拉的动画
            showList: function () {
                if ($('.option-list').css('display') != 'none') {
                    $('.option-list').slideUp();
                }
                else {
                    $('.option-list').slideDown();
                }
            },

            // 通过用户选择的翻译模式,设置相应的数据
            selectOption: function (index) {
                $('.option-list').slideUp();
                this.language = this.language_list[index];
                this.option_result = this.option_list[index];
            }
        }
    }

</script>

App.vue 组件接收到子组件传递过来的数据之后,开始请求百度翻译API,进行翻译。这里因为是跨域请求数据,所以要使用jsonp,如果你不了解如何跨域请求数据,可以参考文章:Vue笔记——解决Vue请求No 'Access-Control-Allow-Origin' 错误

App.vue 组件主要的代码如下:

getText: function (text, lan) {
  this.translateing_text = text;
  this.language = lan;

  // 初始化要传递给API的数据
  var appid = '这里填写是你申请的APP ID';
  var key = '这里填写是你申请的秘钥';
  var salt = (new Date).getTime();
  var query = this.translateing_text;
  var from = 'zh';
  var to = this.language;
  var str1 = appid + query + salt + key;
  var sign = MD5(str1);

  this.$http.jsonp("http://api.fanyi.baidu.com/api/trans/vip/translate?q=" + query + "&from=" + from + "&to=" + to + "&appid=" + appid + "&salt=" + salt + "&sign=" + sign, {}, {
      headers: {},
      emulateJSON: true
  })
      .then(function (response) {
          this.translated_text = response.body.trans_result[0].dst;
          console.log(this.translated_text);
      })
}

通过请求翻译API,可以获得翻译后的结果,接收到这个结果之后,将数据传递给另外一个子组件 translateResult 进行渲染输出。

4.完成项目,打包上线

不熟悉Vue的同学心里面可能会有这样一个疑问,我使用Vue脚手架搭建的项目都是特别大的,而且每次运行都是使用npm run dev来开启服务才能收使用。如果我完成一个项目,想把它传到服务器上面,要怎么做呢?还要不要每次运行的时候都要使用npm run dev来开启服务。

我们使用Vue脚手架搭建的项目是依赖于node.js的。所以我们在开发的时候开启服务之后才能看得到我们的项目,但是如果我们完成了一个项目,就可以使用打包工具把我们的项目给打包成一个静态文件,放到我们的服务器上,不用开启任何服务,就可以直接访问。

关于如何打包Vue项目使之上线,可以参考文章:vue.js项目打包上线

三、总结

以上只是对这个项目的这个项目的简要概括,列出了主要的代码,如果大家对这个项目感兴趣的话,可以直接查看源代码。,GitHub地址:https://github.com/Fengzhen8023/translate-online

源代码在使用的时候,一定要提前申请你的百度翻译API,将申请到的APP ID和秘钥填写到对应的位置,即可使用。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,639评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,277评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,221评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,474评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,570评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,816评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,957评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,718评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,176评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,511评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,646评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,322评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,934评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,755评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,987评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,358评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,514评论 2 348

推荐阅读更多精彩内容

  • 闵行莘庄阅读 111评论 0 0
  • 我其实不大喜欢回答带“最”字的问题,什么你最喜欢哪个明星,最喜欢哪个国家,你最讨厌什么样的人…… 一般...
    荷兮何夕阅读 256评论 0 0
  • 关于作者 亚伦·卡尔,曾经是一个有着33年烟龄的老烟枪,每天多的时候抽过100支烟,少的时候也得60支。因为吸烟,...
    蔚成阅读 1,474评论 1 0
  • 忙里偷闲换脑子的一个小时听完了入门的12节课,整理出了思维导图分享一下~ 好好学习,天天向上!
    腊肠毛毛阅读 212评论 0 0