页面视图开发

Light 的视图开发技术采用vue框架,在每一个视图中都可以使用vue的指令进行模型数据的绑定,将展现和数据解耦,大大提高了H5应用的开发效率,我们以一个初始工程创建的简单的vue视图文件为例,讲解在lighting中如何做页面模块的业务功能开发。

<template>
<div>
{{msg}}
</div>
</template>
<script>
export default {
data(){
return {
msg:"hello,world!"
};
}
}
</script>
<style lang="less">
</style>

声明式渲染

Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统,使得数据和 DOM 被建立了关联,所有东西都是响应式的。修改msg属性的值会立即看到DOM中对应内容的改变!

除了文本插值,我们还可以像这样来绑定元素特性:

<template>
<div>
<span v-bind:title="message">
鼠标悬停几秒钟查看此处动态绑定的提示信息!
</span>
</div>
</template>
<script>
export default {
data(){
return {
message: '页面加载于 ' + new Date().toLocaleString()
};
},
props:[]
}
</script>
<style lang="less">
</style>

这里我们遇到了一点新东西。你看到的 v-bind 特性被称为指令。指令带有前缀 v-,以表示它们是 Vue 提供的特殊特性。可能你已经猜到了,它们会在渲染的 DOM 上应用特殊的响应式行为。在这里,该指令的意思是:“将这个元素节点的 title 特性和 Vue 实例的 message 属性保持一致”。

条件与循环

控制切换一个元素是否显示也相当简单:

<template>
<div>
<div id="app-3">
<p v-if="seen">现在你看到我了</p>
</div>
</div>
</template>
<script>
export default {
data(){
return {
seen: true
};
},
props:[]
}
</script>
<style lang="less">
</style>

这个例子演示了我们不仅可以把数据绑定到 DOM 文本或特性,还可以绑定到 DOM 结构

还有其它很多指令,每个都有特殊的功能。例如,v-for 指令可以绑定数组的数据来渲染一个项目列表:

<template>
<div>
<div>
<p v-for="info in list">{{info}}</p>
</div>
</div>
</template>
<script>
export default {
data(){
return {
list: ['light','is','awesome']
};
},
props:[]
}
</script>
<style lang="less">
</style>

处理用户输入

为了让用户和你的应用进行交互,我们可以用 v-on 指令添加一个事件监听器,通过它调用在 Vue 实例中定义的方法:

<template>
<div>
<p>{{ message }}</p>
<button v-on:click="reverseMessage">逆转消息</button>
</div>
</template>
<script>
export default {
data(){
return {
message: 'Hello Vue.js!'
};
},
methods: {
reverseMessage: function () {
this.message = this.message.split('').reverse().join('')
}
}
}
</script>
<style lang="less">
</style>

注意在 reverseMessage 方法中,我们更新了应用的状态,但没有触碰 DOM——所有的 DOM 操作都由 Vue 来处理,你编写的代码只需要关注逻辑层面即可。

Vue 还提供了 v-model 指令,它能轻松实现表单输入和应用状态之间的双向绑定。

<template>
<div>
<p>{{ message }}</p>
<input v-model="message">
</div>
</template>
<script>
export default {
data(){
return {
message: 'Hello Vue.js!'
};
},
}
</script>
<style lang="less">
</style>