每个小程序至少需要有一个页面,显示的第一个页面称为首页。因为之前所有的页面代码都被删除了,所以我们现在需要创建一个新的主页。在src/目录下,我们新建一个名为name的子目录,然后在这个子目录下新建两个文件:一个用于实现主页面功能的.vue组件,另一个用于由该页面组件生成Vue 。实例化并加载main.js。未来的每个页面组件都会有这样的结构。
然后在main.js中编写如下代码,很简单的一段代码。它的作用是引入.vue并创建一个Vue实例:
当然,你也可以像src/main.js那样导出页面级的配置,因为小程序的每个页面都可以有一些单独的配置:
接下来,我们需要实现 .vue 页面组件。它的写法是最典型的Vue组件写法。
可以看到,这个组件完全没有小程序编写方式的痕迹,而是全部通过使用Vue开发Web应用程序的编写方式来完成:数据绑定、事件处理、本地样式、以及使用HTML标签来完成。构建界面。这样就最大限度地保证了与Web应用开发的一致性,降低了前端人员转用小程序的学习和理解成本,也为原本使用Vue开发的Web应用移植到小程序平台降低迁移成本提供了可能。
我们通常可以使用HTML标签来编写模板部分,例如div、span等,这些标签在编译时会自动转换为小程序的原生组件例如视图、文本;小程序特有的富文本等组件,可以直接在模板中使用。
原生小程序的页面(Page)包含很多页面生命周期方法,如、、、、、等,建议使用Vue组件生命周期方法,而特殊功能如、的生命周期需要直接使用。
回头看,我们实现了这个 .vue 页面组件之后,还差最后一步,就是指定这个页面组件为主页。如果我们的小程序只有一个页面,我们其实可以省略这一步,因为src/目录下的页面组件路径会自动添加到最终编译的小程序配置文件中:
然而,大多数情况下我们的小程序都会由很多页面组成。在src/目录下写入多个页面组件后,它们会自动添加到配置文件中。但是,因为小程序有一个机制:
配置文件中数组中的第一个页面路径将被视为主页
如果您期望的主页组件没有添加到第一个路径中,则不会显示为主页。例如,如果有多个页面,并且在 dist/app.json 中生成以下序列,则第一个 //main 页面将被视为主页:
为了解决这种情况,我们需要明确指定主页。可以在src/main.js的配置中添加这行配置信息:
注意:上面配置中指定为主页的路径前面有一个^符号。
添加这行配置后,最终生成的dist/app.json中//main将始终排在第一位,成为首页。
/ Vue 的重要特性
既然是基于Vue,那么没有理由不进一步学习Vue的核心东西:组件。组件系统是 Vue 应用程序开发中最有价值的功能之一。其实我们在上一篇文章中已经使用过组件了。例如,App.vue 和 .vue 是两个 Vue 组件。
组件是一种抽象,它允许我们使用小型、独立且通常可重用的组件来构建大型应用程序。仔细想想,几乎任何类型的应用程序接口都可以抽象成组件树,几个小组件又可以聚合成一个完整的接口:
一个好的组件系统必须具备这些特性:封装性、可重用性、可扩展性。对于Vue组件来说,这几点在实现上都是比较优秀的。
组件封装
Vue组件的编写方式可以避免属于独立逻辑单元的代码分散各处,界面(DOM)、样式(CSS)、行为(JS)三部分的代码可以很好的组织在一起(推荐的做法是使用 .vue 文件)。在设计和编写组件时,我们需要记住的原则是:
避免向外界暴露太多的东西,只暴露必要的外部交互接口(组件属性、事件、方法等)。
让我们根据原始代码创建一个简单的按钮点击计数器组件。它将实现的功能是:点击按钮并显示按钮的点击次数,点击清除按钮将点击次数重置为零。在src/目录下,新建一个-.vue组件文件,写入以下代码:
写完这个组件后,我们尝试在首页组件src///.vue文件中使用它:
完成以上两步后,记得重新运行命令行 npm run dev (注意:必须重新运行该命令才能添加新文件,编译器不会自动检测新添加的文件)。通过微信开发者工具的模拟器查看成功后,出现的界面如下:
点击“点击我!”按钮,计数器会累计点击次数并更新界面上的数字;单击“清除”按钮会将统计数据重置为零。
回到代码,.vue,-.vue的使用者,并不太关心-.vue的实现细节。如果引入组件文件并声明它,就可以以标签的形式使用它。非常简单明了。而且,这样的-.vue组件还可以在其他Vue/代码中使用,其他用户不需要关注它的实现细节,而只需要关心它能实现什么功能。这就是组件封装的好处。
然而,当前组件与其父组件没有任何交互或通信,没有体现出“接口暴露”的特性。让我们添加一些代码来理解这个功能。首先解释一下我们要实现的功能:组件可以接收外部设置的初始点击值。当“点击我!”时点击按钮,则从此初始值开始累加;并且按钮被点击后,可以通知组件当前用户(即父组件)的点击统计数据。
修改-.vue代码:
修改.vue代码:
观察上面修改后的代码,我们可以发现-.vue的主要变化是:
名为 的数字组件属性是使用定义的(初始值为 0)。它可用于接收从组件外部传入的值。然后,将该值赋给data中的属性num作为其初始值。两个按钮的事件处理方法中,额外调用了一个()方法,该方法向组件触发自定义事件,并携带当前的点击次数。
.vue 中的主要变化是这行用于实例化组件的代码:
实例化组件时,将属性值10传递给组件;并添加自定义事件的监听方法。
这样的结构实现了组件的数据输入/传输数据的机制,父子组件之间可以实现数据通信。通过有限的通信点而不是直接的函数调用来交换数据可以使代码结构更加优雅并且更易于维护。
组件可重用性
组件的可重用性更容易理解。很多时候,创建组件的目的是希望该组件可以在多个地方、多次使用,避免编写重复的代码。比如我们之前的计数器组件可能会被一个项目中的多个页面使用,也可能会在一个页面上使用多次。
复用Vue组件也非常容易。例如,如果我们想复用上例中.vue中的计数器组件,并创建三个计数器,那么直接在模板部分写入三个标签即可:
运行后的效果如下图所示。这三个计数器可以独立统计点击次数:
组件可扩展性
说到可扩展性,有面向对象编程经验的开发人员都会想到“()”。继承是一种比较有效的扩展机制,但是随着继承层次变深,代码会变得难以理解。在Vue组件中,不使用继承机制,但推荐使用“组合”方法。
在组合的理念下,我们尝试将复用性高的组件设计成最小的可分单元,例如按钮、输入框、单选按钮等,然后将这些低级组件放入较高级组件中,一层一层,慢慢组装出满足需求的业务接口。
除了组合之外,Vue 组件还提供了槽函数,相当于在组件上挖一个或多个洞。当使用这些带有插槽的组件时,您可以选择要填充孔的内容(其他组件)。
例如,在计数器组件中,我们在清除按钮后面挖了一个洞:
然后,当在 .vue 中使用计数器组件时,额外的内容会被放置在标签主体中,这些内容将被传递到组件中以填补空白:
从运行结果可以看出,我们传入的复选框和文本内容已经添加到了清除按钮的后面:
槽实际上可以理解为组件属性的另一种形式:普通组件属性传入的是比较简单类型的数据;而槽则传入更复杂的接口组件。
在需要特别注意的地方使用。
1. 模板中,动态插入HTML的v-html指令不可用
这很容易理解。小程序的界面不是基于浏览器的BOM/DOM,因此无法将HTML片段直接动态插入到界面模板中进行显示。如果小程序中需要插入html片段怎么办?它可以使用组件或 .
2. 在模板中,用于数据绑定的双括号语法{{}}中的表达式函数有很多限制。
在Vue自带的模板双括号语法中,我们可以对绑定变量进行更丰富的处理,比如:

上面提到的这些有用的功能根本无法使用! ! !
我们只能在双括号内使用一些简单的运算符(+ - * % ?: ! == === > < [] .)。
但我们必须找到一些可用的替代方案。我们首先考虑使用计算属性 ()。
3、模板中,除事件监听外,其他地方不能调用以下函数。
在 Vue 中,调用模板中部分定义的函数是很常见的。例如,如下代码所示,v-if指令中调用了():
然而,在这里却不能使用!因为小程序原生模板wxml中不支持这种函数调用,所以没有好的办法来翻译。因此,可用的替代方案可能仍然是计算属性。
4. 在模板中,不支持直接绑定对象或属性。
在Vue中,我们可以将对象绑定到HTML元素或从HTML元素绑定对象,并根据对象中的属性值决定是否将相应的属性名称添加到HTML元素的样式名称中。示例如下:
运行上述代码后生成的 HTML 为:
但是,下面不能使用该功能。根据官方的说法,这是由于一些性能相关的原因。那么如果要动态改变组件该怎么写呢?官方方法如下:
其实改动不大,只是多了几个字,相当于在模板中又定义了一个对象。但根据文档,这将提高性能。看来最好的解决方案是使用计算属性直接生成一串样式并将其绑定到or:
5、模板中,嵌套使用v-for时,必须指定索引
通常,当我们在 Vue 模板中渲染带有嵌套循环的数组时,通常如下所示:
但是当使用v-for的这种嵌套结构时,必须在v-for的每一层给出索引,并且索引需要有不同的名称:
6. 事件处理注意事项
中,一般可以使用Web的DOM事件名来绑定事件,Web事件名会映射到对应的小程序事件名。对应的列表如下:
除了上述内容之外,Web 表单组件和事件也将转换为模糊事件。不再有 等键盘事件。因为小程序没有键盘,所以不需要这些事件。
在Vue中绑定事件时,可以指定事件修饰符,不过这里,官方给出了一些注意信息:
所以,总之,当你遇到事件相关的问题时,请回来查看一下文档,看看你是否掉坑里了。
7、表单请直接使用小程序原生表单组件。
总之,表单组件众多且复杂,框架未必能容纳得下。因此,在实际开发中,建议直接使用小程序的表单组件标签来编写,而不是使用Web的表单组件标签。当然,如果使用中小程序的组件标签,数据绑定功能还是完全可以使用的。举个例子:
其他注意事项
另外,在使用Vue开发Web应用时,通常会使用vue-进行页面路由。但在小程序开发中,不能使用这种方法。路由功能请使用标签、小程序原生API wx等。
还有对后端数据的请求。我们在Web开发中通常会使用ajax库来实现这一点,但在小程序开发中不能使用它。还请使用本机 API wx.小程序的。