开发前端框架Vue初尝试

二次信任 提交于 2020-12-08 18:01:55

在当前的Web开发中,前后端分离的概念与好处显而易见。我想尝试下如何在前端展现一个springboot微服务返回的数据。我不打算使用模板引擎在后端完成数据绑定,那么就只有一条路可走了,在前端通过ajax技术来获取springboot微服务的数据,然后使用标准的前端技术来展现数据。

在前端开发中,当前流行的框架有三个:AngularJS, React与Vue。因为Vue是一个在美国的华人小伙开发的缘故,再加上Vue是独立于大公司平台的,因此获得了大众的推崇。

我看了几个Vue的教程Demo后,这项技术刷新了我对web前端开发技术的认知。兴奋之余,想自己动手做个demo来看看。对了我之前写了一个Springboot微服务JPADemo,这个微服务返回一个包含一条商品信息的json字符串。我们可以在浏览器上直接输入这个微服务的网址来查看返回的json字符串内容。不过这样太不友好了。我们可以写一个商品信息页面,然后将这个json包含的商品信息绑定到该页面的相应栏位上。

对于这个需求,我们需要做2件事情:

1. 设计呈现数据的html/css

2.使用ajax技术从后台获取数据并绑定到前端控件上。

我的html页面如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>商品信息</title>
</head>
<body>
    <div id="pgBody">
        <div id="bdGoods">
            <div>
                <label>商品编码:</label>
                <input type="text" placeholder="请输入商品编码" />
            </div>
            <div>
                <label>商品名称:</label>
                <input type="text" placeholder="请输入商品名称" />
            </div>
        </div>
        <div id="error"></div>
    </div>
</body>
</html>

 

然后就是使用Vue来从后台获取数据并映射到控件上。要如何做呢?

使用Vue有2种方式,

第一种就是常规的JS方法,即下载Vue.js文件以及axios.js(axios是Vue的ajax插件),放入到规划的目录下,然后在html文档里使用script来引入Vue及axios.

<script src="./js/vue.js"></script>
<script src="./js/axios.js"></script>

然后我们可以在html的body下方加入我们访问后台的代码,例如:

<script>
        var vmBody = new Vue({
            el: '#pgBody',
            data: {
                seen: false,
                pgContext: '这是页面内容。',
                goods: {
                    idGoods: 0,
                    goodsCode: 'testcode1',
                    goodsName: 'testGoodsName1',
                    qtyOnHand: 0
                }
            },
            mounted: function() {
                let _this = this;

                axios
                .get('http://127.0.0.1:8081/goods/1')
                .then(
                    function(response) {
                        _this.goods = response.data;
                        console.log(_this.goods);

                })
                .catch(function (err) {
                    _this.seen = true;
                    _this.error = err;
                })
            }

        });

    </script>

注意我的这个web前端页面并没有放在微服务里,因此在访问后端时存在浏览器跨域的问题,这个需要修改springboot的微服务,加入对跨域支持的处理。具体如何处理,可以度娘一下。

还有一个坑,就是mounted里需要定义一个变量来指向this,然后实现绑定数据的变化同步。

另外如何绑定数据呢?在Vue里很简单,使用v-bind或v-model指令即可完成,比如本例的商品编码与商品名称的绑定语句如下:

<input type="text" 或v-model="goods.goodsCode" placeholder="请输入商品编码" />

<input type="text" v-model="goods.goodsName" placeholder="请输入商品编码" />

v-bind与v-model的区别在于v-bind后用户修改的信息不会同步到Vue的Data域,而v-model则会同步。因此v-bind主要用于显示不做修改的数据,而v-model用于用户输入界面。 

Vue是如何找到对应的元素的呢?这是通过el属性来指定的,本例中我的Vue绑定的是pgBody这个节点,因此Vue会自动在这个节点下去查找他需要处理的Vue绑定对象。

我们可以把这个html文档放到web服务下,然后访问看看效果。我是另作了一份spring web服务来提供这个html服务。运行效果如下:

Vue使用起来是不是很爽快?!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!