vue学习笔记

1. v-if & v-show:

v-if 是'真正的'条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建.

v-if 也是惰性的,如果在初始渲染时条件为假,那么什么都不做- - 直到条件第一次为真的时候才会开始渲染条件块,相比之下,v-show

就简单得多- - 不管初始条件是什么,元素总会被渲染,并且只是简单的基于css进行切换.

一般来说,v-if 有更高的切换开销,而 v-show 有更高的出事渲染开销.因此,如果需要非常频繁的切换,那么使用v-show好一点;如果在

运行时条件不太可能改变,则使用v-if 好点.

2. Vue元素

创建一个Vue实例时,需要传入一个选项对象,它可以包含数据(data)、模板(template)、挂载元素(el)、方法(methods)、生命周期钩子(lifecyclehook)等选项

3. Vue的生命周期

1)开始创建

2)初始化数据

3)编译模板

4)挂载DOM->渲染

5)更新->渲染

6)卸载

钩子函数:八个阶段

注:Vue实现响应式不是数据发生变化后DOM立即变化,而是按一定的策略进行DOM的更新

1、$nextTick([callback])方法——在下次DOM更新循环结束之后执行延迟回调

1)created截断访问DOM必须要在$nextTick的回调中才能获取到

2)在修改数据后使用$nextTick,才可以在它的回调中获取更新后的DOM节点

2、$forceUpdate方法——迫使Vue实例重新渲染(不建议滥用)

仅仅影响实例本身和插入插槽内容的自组件,而不是所有子组件

4. 模板语法

差值: {{}}绑定普通文本 v-html指令 输出真正的HTML

指令: v-bind绑定指令 (v-bind:href简化为:href)

           v-on事件绑定指令 (v-on:click简化为@click)

           v-if/v-else/v-if-else/v-show/v-for/v-model

           :class

           :style

5.修饰符

修饰符是由开头的指令后缀来表示的

事件修饰符 <form @submit.prevent="onSubmit" /> event.preventDefault()

                  <button @click.stop="clickEvent" /> event.stopPropagation()

按键修饰符 <input type="type" @keyup.enter="submit" />

.trim修饰符 <input type="type" v-model.trim="dataValue" />

6. computed

计算属性:通常我们会在模板中绑定表达式,模板是用来描述视图结构的,如果模板中的表达式存在过多的逻辑,模板会变的臃肿不堪,维护变得非常困难。因此,为了简化逻辑,当某个属性的值依赖于其他属性的值时,我们可以使用计算属性。

computed VS methods:

1. 计算属性是基于它们的依赖进行缓存的

2. 每当触发重新渲染时,调用方法总会再次执行

computed VS watch:

1. computed监听多个依赖属于发生变化去触发执行函数,偏向于计算、数据的处理

2. watch本质是监听单一依赖属性发生变化去触发执行函数,偏向于属性值的监听

注:在Vue.js0.12.8版本之前,只要读取相应的计算属性,对应的getter就会重新执行。Vue.js0.12.8版本中,在这方面进行了优化,即只有计算属性依赖的属性值发生了变化时才会重新执行getter。

eg: this.item.isSelected属性会变化,而computed会进行缓存,因此一点点击没效果,后将cache属性设置为false即可。

7. vue-router

1)前端路由:直接找到与地址匹配的一个组件或对象并将其渲染出来

2)引入:

3)路由的常用模式:

· Hash 使用URLhash值作为路由,支持所有浏览器

· History 依赖HTML5 History API和服务器配置

路由配置:

4)路由的参数类型:

· $router.params

· $router.query(查询字符串参数)

· $router.meta(常量参数)

5)路由对象router的常用方法

router.push(location, onComplete?, onAbort?)

router.replace(location, onComplete?, onAbort?)

router.go(n)

router.back(n)

8. axios

基于Promise的HTTP库

9. 组件通信

非父子组件的通信

10. Vuex状态管理库

采用集中式存储来管理应用的所有组件状态,并以相应的规则保证状态以一种可预测的方式发生变化

1)优点:共享状态、跟踪状态的变化、统一管理和易维护

2)引入:

3)原理图和核心概念

11. $router和$route的区别

$router——VueRouter实例,提供导航的方法,this.$router.back()

$route——当前router跳转对象,可以获取name/path/query/params等

12. 路由导航守卫

router.beforeEach注册全局前置守卫

13. 页面建的消息通信——嵌套路由

消息发送

消息接收

14. 插件——通常为Vue添加全局功能

添加全局方法或者属性Vue.httpService = httpService;

添加Vue实例方法 Vue.prototype.$httpService = httpService;

添加全局资源:组件/指令/过滤器等 Vue.component('app-header', AppHeader);

通过全局mixin方法添加一些组件选项,如:vue-router

15. v-ref & v-el

v-ref: 在父组件上注册一个子组件的索引,便于直接访问。不需要表达式,必须提供参数id。可以通过父组件的$refs对象访问子组件

v-el: 为DOM元素注册一个索引,方便通过所属实例的$els访问这个元素。可以用v-el:some-el设置this.$els.someEl

16. 样式绑定

DRY(Don't Repeat Yourself)

由于CSS总是充满各种不得不重复的写法,所以推荐使用less,安装webpack支持less编译的包的方法:

安装完成后在webpack.config.js的modules设置内加入以下配置:

注:通过import将样式文件导入是一种全局性的做法,容易导致样式冲突。如果希望样式表仅应用于当前组件,可以使用<style scoped>,然后用CSS的@import当如样式表:

17. 在所有的过滤器中是没有this引用的,过滤器内的this是一个undefined的值,所以不要在过滤器内尝试引用组件实例内的变量或方法,否则会引发空值引用的异常。

18. 服务端获取数据

Vue的标准库并没有提供访问远程服务器(AJAX)功能,所以我们需要安装另一个库-vue-resource。vue-resource并不是Vue官方提供的库,而是有PageKit(https://github.com/pagekit)团队所开发的,它的体积小,学习成本低,是Vue项目中用于访问远程服务器的一个优秀第三方库。

安装: npm i vue-resource -D

引入: import Vue from  'vue'

           import VueResource from 'vue-reousrce'

           Vue.use(vueResource)

使用:this.$http.get(url).then(res => {

              console.log(res);

          })

19. Vue组件间共享对象

Javascript语言对象在赋值的时候,是将其引用地址赋值给了一个新的变量,所以改变心对象属性时,会同时改变原对象属性。

20. Vue响应式写法注意点

注意:Vue不能检测到对象昂属性的新增或删除

1)对象属性的修改建议采用this.$set方式

2)数组利用索引赋值采用this.$set(this.dataList, index, newValue)

21. 设计模式——订阅发布模式

1)定义了一种一对多的依赖关系,让多个订阅者对象同时监听某一个主题对象

2)主题对象在自身状态变化时,会通知所有订阅者对象,使它们能够自动更新自己的状态

22. input type="number"聚焦有问题

23. vux组件库

24. props传入的value值是不允许在子组件中进行修改的,修改的话vue会报错,会改变的两不妨到computed方法里面去,数据层转换,显示的采用computed,比过滤器好用,会进行缓存,data是模型值,用watch监听变化,computed只是用来做展示的

单向数据流:.sync父组件传值给子组件,子组件通过emit事件给父组件传递消息

.sync是个语法糖,最后还是得由子组件发送消息给父组件

25. deep 对象的引用地址不变,vue监听不到变化,需要加上deep,不然属性值变化监听不到

26. $dispatch和$broadcast替换已经弃用,因为基于组件树结构的事件流方式实在是让人难以理解,所以在组件结构扩展的过程中变得越来越脆弱。这种方式确实不太好用,并且$dispatch和$broadcast也没有解决兄弟组件间的通信问题。对于$dispatch和$broadcast最简单的升级方式就是:通过使用事件中心,允许组件自由交流,无论组件处于组件树的哪一层。

父子组件的相互通信。使用v-on监听子组件上$emit的变化。

跨多层父子组件通信,用集中式的事件中间件可以做到简单的升级。

eg: 假设我们有个 todo 的应用结构如下:

Todos
├─ NewTodoInput
└─ Todo
   └─ DeleteTodoButton

可以通过单独的事件中心管理组件间的通信:

// 将在各处使用该事件中心
// 组件通过它来通信
var eventHub = new Vue()

然后在组件中,可以使用 $emit$on$off 分别来分发、监听、取消监听事件:

// NewTodoInput
// ...
methods: {
  addTodo: function () {
    eventHub.$emit('add-todo', { text: this.newTodoText })
    this.newTodoText = ''
  }
}
// DeleteTodoButton
// ...
methods: {
  deleteTodo: function (id) {
    eventHub.$emit('delete-todo', id)
  }
}
// Todos
// ...
created: function () {
  eventHub.$on('add-todo', this.addTodo)
  eventHub.$on('delete-todo', this.deleteTodo)
},
// 最好在组件销毁前
// 清除事件监听
beforeDestroy: function () {
  eventHub.$off('add-todo', this.addTodo)
  eventHub.$off('delete-todo', this.deleteTodo)
},
methods: {
  addTodo: function (newTodo) {
    this.todos.push(newTodo)
  },
  deleteTodo: function (todoId) {
    this.todos = this.todos.filter(function (todo) {
      return todo.id !== todoId
    })
  }
}

在简单的情况下这样做可以替代 $dispatch 和 $broadcast,但是对于大多数复杂情况,更推荐使用一个专用的状态管理层如:Vuex

27. slot分发内容:单个插槽、多个插槽(具名插槽)、作用域插槽(将子组件的值传到父组件使用)

在使用组件时,常常要像这样组合它们:

<didi>

    <didi-header></didi-header>

    <didi-footer></didi-footer>

</didi>

注意两点:

1)<didi>组件并不知道它的挂载点会有什么内容,挂载点的内容是由<didi>的父组件决定的

2)  <didi>组件很可能有自己的模板

为了让组件可以组合,我们需要一种方式来混合父组件的内容和子组件自己的模板。这处理称为内容分发(或“transclusion”)。Vue.js实现了一个内容分发API,参照了当前Web组件规范草稿,使用特殊的<slot>元素作为原始内容的插槽

28. 动态组件:多个组件可以使用同一个挂载点,然后动态地在它们之间切换。使用保留的<component>元素,动态地绑定到它的is特性。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值