在Grails中如何使用Vue.js写前端

整体代码结构

由于 Grails 框架现在并不支持解析 Vue.js的插件, 所以采用如下方式:


Grails项目结构
vbuilder项目结构

其中,assets/vbuilder/目录下放置的是ci/vueSrc编译生成的js文件。
以appDetail.gsp举例,appDetail.gsp中的代码如下所示

<body>

<div class="container-fluid">
    <g:render template="side"/>
    <div id="appDetail">
        <router-view></router-view>
    </div>
</div>

<script src="${assetPath(src: 'vbuilder/static/common.js')}" type="text/javascript"></script>
<script src="${assetPath(src: 'vbuilder/static/appDetail/index.js')}" type="text/javascript"></script>
</body>

vueSrc/pages/appDetail/中包含 index.js 和 index.vue 两个文件。其中index.js是包含路由设置,而index.vue负责页面UI和业务逻辑。

大家都知道,Vue的代码需要编译成js代码之后,才能在浏览器中生效。所以,修改Vue代码之后,使用webpack打包,刷新页面,才能看到修改之后的页面。但是我们公司开发了一个实时编译Vue代码的工具-vbuilder.这个工具能感知指定目录下的文件变化,一旦文件发生改动,它会重新编译生成JS文件,不需要我手动使用webpack打包。总的来说,Grails与Vue结合的重点的是assets目录,它的整体流程如下所示:

Grails与Vue流程

Vue 工程的代码结构

接下来就是vueSrc工程的代码结构

vueSrc结构

uto-orient/strip%7CimageView2/2/w/1240)

vueSrc下有common,components,node_modules,pages四个目录其中,他们的作用如下所示

目录名 描述
page 一个页面对应一个目录,每个目录下都包括index.js文件
common 包括api.js,config.js,common.js。其中api.js存储后端的URL; config.js存储标题,内容等常量; common.js 是一些普遍常用的函数
components 包含该工程特有的组件库
node_modules 第三方组件库

Vue.js 在项目中遇到的坑

  • Vue 中的 data 属性一般是用于数据的初始化,这里需要注意的是,data 中定义的变量a,当该变量 a 的值发生变化时,使用该变量的 html 中。也会发生变化;但是依赖b =a +1 (其中b定义在data)中的b,并不会随着a的变化而变化。
  • Vue 中如果父子组件同时需要修改子组件中某个属性的值。这个属性最好存在于props中,当子组件需要修改该值时,通过 emit 方法向父组件发送消息,请求父组件修改该属性的值。
  • data 中的属性的初始化不能利用props的属性
export default {
    props: {
            customClass: {
                type:String,
                default: ''
            },
            options: {
                type:Array,
                default: []
            },
            initOption: {
                type:String,
                default: ''
            }
        },
        data: {
            optionVal: this.initOption
        },
}

这样会报错。

props与data

原因是,props的初始化在data初始化之后?

  • Vue 中 methods 有正确的调用顺序
函数调用
  • Vue 中双向数据渲染需要注意的问题
this.alert = CONFIG.addOrUpdateAppSuccessAlert;
this.alert.show = true

首先CONFIG.addOrUpdateAppSuccessAlert会变成一个新的Vueobject。由于alert.show有双向数据渲染,所以CONFIG.addOrUpdateAppSuccessAlert.show会变成false。而且无法变为true。所以上面正确的写法如下所示

this.alert = JSON.parse(JSON.stringfy(CONFIG.addOrUpdateAppSuccessAlert)) ;
  • Vue 初始化需要注意的点
<input v-model='jobInfo.name'>

<script>
export default{
    data(){
        return {
            jobInfo: {
            
            }
        }
    
    }

}
</script>

如果jobInfo中没任何定义的话,jobInfo.name是无法和 input 元素进行双向绑定的,至于为什么呢?因为在 Vue 2.0 中 v-model 不再创造没有初始化的属性。所以,无法双向绑定。

v-model初始化

v-model with uninitialized property

  • Vue 中监听某个 object 类型的 key 值
data: {
    block: {
        checkbox: {
            active:false
        },
        someotherprop: {
            changeme: 0
        }
    }
},
watch: {
   'block.checkbox.active': function() {
        // checkbox active state has changed
        this.block.someotherprop.changeme = 5;
    } 
}

Vue JS Watching deep nested object

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

推荐阅读更多精彩内容