n1cef1sh's Blog

配置

使用淘宝npm镜像

$ npm install -g cnpm --registry=https://registry.npm.taobao.org

全局安装 vue-cli

$ cnpm install --global vue-cli

创建一个基于 webpack 模板的新项目

$ vue init webpack my-project

需要进行一些配置,默认回车即可

在安装过程中始终出现各种错误,查找资料和文档尝试了很多方法未果。最后换了热点重新下载配置即可,这里不得不要感慨一下校园网的网络质量…… QQ截图20200922151954.png QQ截图20200922151943.png

如图所示,最终成功使用npm安装并运行了项目。然后先git到github方便后面同步学习。

起步

声明式渲染

Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统。
一个 Vue 应用会将其挂载到一个 DOM 元素上 (对于这个例子是 #app或#app2) 然后对其进行完全控制。那个 HTML 是我们的入口,但其余都会发生在新创建的 Vue 实例内部。

条件和循环

实例

var obj = { foo: ‘bar’ }

Object.freeze(obj)

除了数据 property,Vue 实例还暴露了一些有用的实例 property 与方法。它们都有前缀 $,以便与用户定义的 property 区分开来。

vm.$data === data
vm.$el === document.getElementById('test1')

vm.$watch('a', function(newValue, oldValue){
    //此回调将在'vm.a'改变后调用
}

生命周期

此处先放图,后期学习过程中再结合理解。 lifecycle.png

模板语法

插值

文本

指令

vs方法

侦听器

当需要在数据变化时执行异步或开销较大的操作时,需要一个自定义的侦听器。Vue 通过 watch 选项提供了一个更通用的方法,来响应数据的变化。

使用 watch 选项允许我们执行异步操作 (访问一个 API),限制我们执行该操作的频率,并在我们得到最终结果前,设置中间状态。这些都是计算属性无法做到的。

这里用到一个有趣的网站,可以帮你果断的做出Yes或No的选择,你先确定你的问题是什么,然后打开网站即可 传送门
(犹豫就会败北,果断就会白给)

条件渲染

Vue 会尽可能高效地渲染元素,通常会复用已有元素而不是从头开始渲染。

切换 loginType 将不会清除用户已经输入的内容。因为两个模板使用了相同的元素, input 不会被替换掉——仅仅是替换了它的placeholder。

Vue 提供了一种方式来表达“这两个元素是完全独立的,不要复用它们”。只需添加一个具有唯一值的 key attribute 即可:

每次切换时,输入框都将被重新渲染。但是,

label元素仍然会被高效地复用,因为它们没有添加 key attribute。

v-if vs v-show

事件处理

事件修饰符

比较好的原则是: 方法只有纯粹的数据逻辑,而不是去处理 DOM 事件细节。

使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。因此,用 v-on:click.prevent.self 会阻止所有的点击,而 v-on:click.self.prevent 只会阻止对元素自身的点击。

监听事件的好处

  1. 扫一眼 HTML 模板便能轻松定位在 JavaScript 代码里对应的方法。
  2. 无须在 JavaScript 里手动绑定事件, ViewModel 代码可以是非常纯粹的逻辑,和 DOM 完全解耦,更易于测试。
  3. 当一个 ViewModel 被销毁时,所有的事件处理器都会自动被删除。无须担心如何清理它们。

表单输入绑定

知识补充

语法糖

语法糖(Syntactic sugar),是指添加的某种语法,对语言的功能并没有影响。简单理解就是,加糖后的代码编译后跟加糖前一模一样。
糖在不改变其所在位置的语法结构的前提下,实现了运行时的等价。但是加糖后,会使代码更简洁流畅,语义更自然。例如for循环就是一个语法糖

双向数据绑定

v-model

v-model 指令在表单

<input>、<textarea> 及 <select>

元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。
v-model本质上是语法糖。它负责监听用户的输入事件以更新数据。

文本

QQ截图20200928151412.png

其他多种形式

QQ截图20200928152233.png

修饰符

组件基础

组件复用

组件是可复用的 Vue 实例,且带有一个名字:在这个例子中是 。我们可以在一个通过 new Vue 创建的 Vue 根实例中,把这个组件作为自定义元素来使用。 点击按钮时,每个组件都会各自独立维护它的 count。因为你每用一次组件,就会有一个它的新实例被创建。

一个组件的 data 选项必须是一个函数,因此每个实例可以维护一份被返回对象的独立的拷贝。如果 Vue 没有这条规则,点击一个按钮就可能会像如下代码一样影响到其它所有实例。

prop

使用 v-bind 来动态传递 prop,在一开始不清楚要渲染的具体内容,比如从一个 API 获取博文列表的时候,是非常有用的。

单个根元素

当组件变得越来越复杂的时候,我们的博文不只需要标题和内容,还需要发布日期、评论等等。为每个相关的信息定义一个 prop 会变得很麻烦。
重构一下这个 组件了,让它变成接受一个单独的 post prop

监听子组件事件

更新于2020-12-1

在更新博客的时候突然build failed,一开始盲目的搜了些解决方法都不行,然后在github的actions中看到了详细的错误原因

一开始只是另一个flask-web的博客报错(详见12.1博文),莫名其妙地突然此篇也开始报错,发现问题就是引用代码的部分,涉及到的html代码可能因为格式问题导致被错误的解析,个别字符和关键字也暴露出来。

索性将此文涉及的代码全都删除掉了,本来也只是跟着参考资料顺下来的学习记录,代码没有太多参考价值,且在GitHub也有备份

警示是今后博文中不去直接引用html代码,防止出现乱七八糟的错误。重要的是记录思路和学习的过程。

参考

Vue文档