从零开始 Vue.js 笔记

安装 on macOS

brew install npm
npm install cnpm -g  # 从此用 cnpm 代替 npm,因为下载文件更快
cnpm install -g vue-cli

安装完成,即可打开 IDEA,安装 Vue plugin,开始创建第一个 Vue 项目、添加 configuration(npm) 此系列过程省略。

备忘命令

命令行创建项目:

vue init webpack my-project
cd my-project
cnpm install
cnpm run dev

成功执行以上命令后访问 http://localhost:8080/ 即可。热更新,开发极其方便。

目录解析

目录 / 文件说明
build项目构建(webpack)相关代码
config配置目录,包括端口号等。我们初学可以使用默认的。
node_modulesnpm 加载的项目依赖模块
src开发目录,基本上要做的事情都在这个目录里。里面包含:
src说明
assets图片
components里面放了一个组件文件,可以不用
App.vue项目入口文件,我们也可以直接将组件写这里,而不使用 components 目录
main.js项目的核心文件
static静态资源目录,如图片、字体等
test初始测试目录,可删除
.xxxx文件一些配置文件,包括语法配置,git配置等
index.html首页
package.json项目配置文件
README说明文档

学习笔记 (仅留作备忘)

Vue 对象,其成员取出方式:vm.$data

插值

文本: {{ msg }}
html:<div v-html=“msg”></div> , msg 是 data的一个K,V是 html 代码字符串
属性:v-bind 响应式更新属性, e.g. v-bind:href="" e.g. v-bind:class="{‘class_name’: data_bool, ‘c2’: d2}",实际上,class=可以对应一个对象字典,可以保存到 data、computed 里,{class_name: bool};也可以是一个数组[c1, c2] e.g. v-bind:style="{ color: ‘green’, …}" =后一个字典、数组,可以是保存到对象

<script>
export default {
  name: 'HelloWorld',
  data () {
    return {
      use: false,
      test_data1: 'test data'
    }
  },
  methods: {
    test_func1: function () {
      return this.test_data1 + ' from test func'
    },
    change_func1: function () {
      this.test_data1 = 'clicked' // 会使 使用 test_func1 的元素重新调用 test_func1
    }
  }
}
</script>
computed 与 methods

一般 computed 只有相关依赖发生改变时才会重新取值。而 methods 总会重新调用;
computed 可以实现 getter 和 setter, e.g

    site: {
      get: function () {
        return ......
      },
      set: function (newValue) {
        var ....... 
      }
    }
v-if

v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素
v-else 、v-else-if 必须跟在 v-if 或者 v-else-if之后;条件判断可以用库函数
对于简单条件显示的元素如果需要非常频繁地切换,则使用 v-show;如果在运行时条件不太可能改变,则使用 v-if

v-on

v-on 指令,它用于监听 DOM 事件,e.g. v-on:click=“function”
vue_obj.$watch(’’, function(newv, oldv) {}); // 即在那个字典里扩充一项

v-model,修饰符

在 input 等输入类元素中 使用 v-model 实现双向数据绑定;复选框checkbox输出可以是一个数组
修饰符 .lazy .number:<input v-model.number="age" type="number"> .trim
修饰符,以 . 指明的特殊后缀,用于指出一个指令应该以特殊方式绑定。
如 .prevent 使 v-on 触发的事件调用 event.preventDefault()。修饰符可以串联
e.g. <form v-on:submit.prevent="onSubmit"></form> 提交事件不再重载页面;
e.g. v-on:click.stop 阻止单击事件冒泡; capture;self;once
按键修饰符
keyup,keypress,keydown; <input v-on:keyup.13="func">: keycode 为 13时调用 func;keyup.enter 等助记

过滤器

可用在两个大括号或指令中,格式 msg | formatter , 函数 formatter 第一个参数为 msg,可以直接再增加参数,formatter(arg2, arg3… )

缩写

v-bind: -> :
v-on: -> @

组件

全局:

Vue.component('runoob', {
  template: '<h1>自定义组件!</h1>'
})

局部组件:在某实例内注册 components: { 'runoob': child_dict }
child_dict 格式:{ props: ['msg1', 'msg2'], template: '<span>{{ msg1 + msg2 }}</span>' }
prop 是父组件用来传递数据给子组件的一个自定义属性,子组件需要显式地用 props 选项声明 “prop”
<runoob msg1="test" msg2=" compo"></runoob>
当 prop 是一个对象而不是字符串数组时,prop验证:props:{ pA: Number, pB:[Number, String, ..] pC:{type: String, required: true}, pD: {type, default}, pF:{ validator: function(value) { return value > 10 }}}, type 支持自定义构造器 instanceof

自定义组件可以直接使用 v-bind、v-for 等等。

需要把子组件数据传回父组件,要自定义事件,思想:监听子组件的行为 $on(eventName) 或 v-on: 监听事件,$emit(eventName) 触发事件
在某个自定义组件(根元素)上监听一个原生事件,使用 .native 修饰

自定义指令

e.g. 注册一个全局自定义指令 v-focus

Vue.directive('focus', {
  // 当绑定元素插入到 DOM 中
  inserted: function (el) {
    // 聚焦元素
    el.focus()
  }
})

局部指令 同理, directives: { dir1: {}, dir2: {} }
钩子:
bind;inserted;update;componentUpdated;unbind
指令的名字、修饰符等都在参数中:
el: 指令所绑定的元素,可以用来直接操作 DOM

binding: 一个对象,包含以下属性:

  • name: 指令名,不包括 v- 前缀。
  • value: 指令的绑定值, 例如: v-my-directive=“1 + 1”, value 的值是 2(支持Vue data、js对象等)。
  • oldValue: 指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用。
  • expression: 绑定值的表达式或变量名。 例如 v-my-directive=“1 + 1” , expression 的值是 “1 + 1”。
  • arg: 传给指令的参数。例如 v-my-directive:foo.bar, arg 的值是 “foo”。
  • modifiers: 一个包含修饰符的对象。 例如: v-my-directive.foo.bar, 修饰符对象 modifiers 的值是 { foo: true, bar: true }。
  • vnode: Vue 编译生成的虚拟节点。

oldVnode: 上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。

路由

一个根实例,有 router
router 是一个 VueRouter 实例,实例内部有 routes
routes 是一个数组,一个数组元素是一个 字典,path 和 component
总之刚开始非常难理解,这里不知道怎么解释,只知道怎么用。

<router-link> 属性
to,tag 属性
<!-- to 加一个字符串,目标地址 -->
<router-link to="home">Home</router-link>
<!-- 默认渲染后是一个 a,指定其他标签如 tag="li" -->
<a href="home">Home</a>

使用 v-bind:to 可以扩展功能类似前面,再想加字符串要 "'str'"
其他如 “{ path: ‘home’ }”
命名路由 “{ name: ‘user’, params: { userId: 123 }}”
带查询参数,下面的结果为 /register?plan=private
“{ path: ‘register’, query: { plan: ‘private’ }}”

replace 属性

点击调用 router.replace() 而不是 router.push(),导航后不会留下 history 记录:
<router-link :to="{ path: '/abc'}" replace></router-link>

append 属性

从 /a 导航到一个相对路径 b,没有配置 append 则路径为 /b,配了则为 /a/b
<router-link :to="{ path: 'relative/path'}" append></router-link>

(exact-)active-class

设置 链接激活(准确激活)时使用的 CSS 类名。
router-link 默认情况下的路由是模糊匹配,e.g. 访问 /article/1也会激活 <router-link to="/article">;当设置 exact-active-class 以后,这个 router-link 只有在当前路由被全包含匹配时才会被激活 exact-active-class 中的 class

event

声明可以触发导航的事件。可以是一个字符串或是一个包含字符串的数组,如 mouseover

混入 mixins,Vue.mixin

有一些在某些组件中可复用的方法或者计算属性,使用混入对象时,所有混入对象的选项将被混入该组件本身的选项。如果 methods 选项中有相同的函数名,则 Vue 实例优先级会较高。

ajax

和其他框架大同小异,略,主要就是 this.$http

Vue.set

在运行过程中实现属性 (data中的某个对象)的添加或删除,则可以使用全局 Vue: Vue.set 和 Vue.delete 方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值