使用淘宝npm镜像
$ npm install -g cnpm --registry=https://registry.npm.taobao.org
全局安装 vue-cli
$ cnpm install --global vue-cli
创建一个基于 webpack 模板的新项目
$ vue init webpack my-project
需要进行一些配置,默认回车即可
在安装过程中始终出现各种错误,查找资料和文档尝试了很多方法未果。最后换了热点重新下载配置即可,这里不得不要感慨一下校园网的网络质量……
如图所示,最终成功使用npm安装并运行了项目。然后先git到github方便后面同步学习。
Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统。
一个 Vue 应用会将其挂载到一个 DOM 元素上 (对于这个例子是 #app或#app2) 然后对其进行完全控制。那个 HTML 是我们的入口,但其余都会发生在新创建的 Vue 实例内部。
此例说明可以把数据绑定到DOM结构,不仅仅可以绑定到DOM文本或attribute
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'改变后调用
}
此处先放图,后期学习过程中再结合理解。
动态参数:可以用方括号括起来的JS表达式作为参数 当 eventName 的值为 “focus” 时,v-on:[eventName] 将等价于 v-on:focus。
当需要在数据变化时执行异步或开销较大的操作时,需要一个自定义的侦听器。Vue 通过 watch 选项提供了一个更通用的方法,来响应数据的变化。
使用 watch 选项允许我们执行异步操作 (访问一个 API),限制我们执行该操作的频率,并在我们得到最终结果前,设置中间状态。这些都是计算属性无法做到的。
这里用到一个有趣的网站,可以帮你果断的做出Yes或No的选择,你先确定你的问题是什么,然后打开网站即可 传送门
(犹豫就会败北,果断就会白给)
Vue 会尽可能高效地渲染元素,通常会复用已有元素而不是从头开始渲染。
切换 loginType 将不会清除用户已经输入的内容。因为两个模板使用了相同的元素, input 不会被替换掉——仅仅是替换了它的placeholder。
Vue 提供了一种方式来表达“这两个元素是完全独立的,不要复用它们”。只需添加一个具有唯一值的 key attribute 即可:
每次切换时,输入框都将被重新渲染。但是,
label元素仍然会被高效地复用,因为它们没有添加 key attribute。
v-if 是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。
v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。
相比之下,v-show 就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 进行切换。
一般来说,v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好。
比较好的原则是: 方法只有纯粹的数据逻辑,而不是去处理 DOM 事件细节。
使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。因此,用 v-on:click.prevent.self 会阻止所有的点击,而 v-on:click.self.prevent 只会阻止对元素自身的点击。
语法糖(Syntactic sugar),是指添加的某种语法,对语言的功能并没有影响。简单理解就是,加糖后的代码编译后跟加糖前一模一样。
糖在不改变其所在位置的语法结构的前提下,实现了运行时的等价。但是加糖后,会使代码更简洁流畅,语义更自然。例如for循环就是一个语法糖
v-model 指令在表单
<input>、<textarea> 及 <select>
元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。
v-model本质上是语法糖。它负责监听用户的输入事件以更新数据。
组件是可复用的 Vue 实例,且带有一个名字:在这个例子中是
一个组件的 data 选项必须是一个函数,因此每个实例可以维护一份被返回对象的独立的拷贝。如果 Vue 没有这条规则,点击一个按钮就可能会像如下代码一样影响到其它所有实例。
使用 v-bind 来动态传递 prop,在一开始不清楚要渲染的具体内容,比如从一个 API 获取博文列表的时候,是非常有用的。
当组件变得越来越复杂的时候,我们的博文不只需要标题和内容,还需要发布日期、评论等等。为每个相关的信息定义一个 prop 会变得很麻烦。
重构一下这个
在更新博客的时候突然build failed,一开始盲目的搜了些解决方法都不行,然后在github的actions中看到了详细的错误原因
一开始只是另一个flask-web的博客报错(详见12.1博文),莫名其妙地突然此篇也开始报错,发现问题就是引用代码的部分,涉及到的html代码可能因为格式问题导致被错误的解析,个别字符和关键字也暴露出来。
索性将此文涉及的代码全都删除掉了,本来也只是跟着参考资料顺下来的学习记录,代码没有太多参考价值,且在GitHub也有备份。
警示是今后博文中不去直接引用html代码,防止出现乱七八糟的错误。重要的是记录思路和学习的过程。