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>
|