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>