从零到部署:用 Vue 和 Express 实现迷你全栈电商应用(三)

这篇文章中,我们将讲解 Vue 实例的 Props 和 Methods,接着我们又讲解了最常见的 Vue 模板语法,并通过实例的方式将这些模板语法都实践了一番,最后我们讲解了 Vue 组件的组合,并完成了我们的发表商品页面。

欢迎阅读《从零到部署:用 Vue 和 Express 实现迷你全栈电商应用》系列:

从零到部署:用 Vue 和 Express 实现迷你全栈电商应用(一)[1]从零到部署:用 Vue 和 Express 实现迷你全栈电商应用(二)[2]从零到部署:用 Vue 和 Express 实现迷你全栈电商应用(三)(也就是这篇)

用模板语法和双向绑定实现数据的添加

当我们完成了商城应用的基本页面框架之后,我们就可以开始考虑具体页面的内容了。首先我们要考虑的就是数据的来源,即添加商品页面。有了添加商品的入口,我们就可以展示商品列表,获取商品详情,甚至是修改商品信息。

不过在此之前,我们打算先复习一下 Vue 的一些重要知识点。如果你已经很熟悉了,可以直接跳到下面实现 ProductForm.vue 的代码部分。

Vue 实例:Props 和 Methods

Props

props 是 Vue 进行组件之间传参的形式。比如我们有如两个组件 New.vue 和 ProductForm.vue,在 New.vue 组件中需要使用到 ProductForm.vue 组件。其中 New.vue 组件是用来创建商品的,它的代码大致是这样的:

import ProductForm from '@/components/ProductForm.vue';



它需要给 ProductForm.vue 组件传递一个 manufacturers 属性,以确保我们在创建商品时,可以选择这个商品所属的制造商,接着我们就可以在 ProductForm.vue 中的 props 中取到这个 manufacturers 属性。ProductForm.vue 的代码大致是这样的:





可以看到,我们在 ProductForm.vue 的 script 部分导出的对象里面找到 props 属性,然后取到 manufacturers 属性。

Methods

然后是 methods ,methods 是用来定义在组件中会用到的一些方法,如果说我们前面提到的 data ,是从数据从逻辑层(JS)向视图层(Html)流动的话,那么这里的 methods 就是视图层触发事件,如 click、submit等,反过来修改逻辑层的数据的方法,methods 使得数据可以双向流动。

让我们在完善一下我们的 ProductForm.vue ,看一下 Methods 在 Vue 中是如何运作的:





可以看到,我们可以通过在 template (视图层)通过点击提交按钮,发起表单提交事件,进而调用在 script 中定义在 methods 属性中的 saveProduct 方法,这个方法可以进一步修改定义在定义在 data 属性中的数据;甚至如果父组件 New.vue 传递了方法(以 props 的形式)给 ProductForm.vue 组件,我们可在 saveProduct 调用这个传递下来的方法,进而可以影响到父组件 New.vue 中的数据。我们将在后面的正式实现 ProductForm 组件时讲解到它。

模板语法:v-on

接下来我们再来谈一谈 v-bind 和 v-on 。

在 Vue 中,我们通过 v-on 的方式接管了之前在 HTML 中 onEvent :

比如之前我们在 HTML 中的写法是这样的:

Hello Tuture

现在在 Vue 的模板语法中我们需要写出这样:

Hello Tuture

类似的 onEvent 都要改成 v-on:Event。然后这样写显得比较冗余,所以 Vue 支持简化写法,用 @ 替换 v-on: 部分,我们就可以写出这样:

Hello Tuture

调用事件之后我们一般有一些这样的操作,比如禁用浏览器默认行为,然后自己去处理事件,获取后端数据,以前我们会这样写:

Hello Tuture

但是这样写又显得特别繁琐了,Vue 也觉得这样可以简化,于是我们直接将这些禁止默认行为的调用作为绑定事件的属性来进行处理,于是乎在 Vue 中我们可以写出这样:





不知道看了上面的长文,你有没有一点晕,不管你晕不晕,我是得喝口水缓一下。- v -

模板语法:v-bind

我们已经看到在 Vue 模板中我们可以使用如下的功能:

{{}} 插值语法将 data 渲染到 HTML 元素内容中v-on 或者简化写法 @ ,等用来取代 HTML 的事件绑定

有了上面的功能,我们可以让 HTML 动起来了,但是还缺点什么,比如我们的 HTML 属性,如 idclass 等,是不是也能动态的获取变化值,你还别说,还真的可以,Vue 模板语法为我们提供了 v-bind 用于动态绑定属性值,我们来看个例子:





可以看到,我们在 script 中导出的对象属性 data 中,定义了 _id 和 value 值,然后我们通过在