遇到的坑:
1.问题:数组的更新及Object对象的属性更新后,vue视图没有及时更新
解决方案:先清空数组或对象再赋值新值 | 更新数组某一项可使用arrayObj.$set(index, newValue)方法
2.vue内置事件执行顺序
init -> created -> beforeCompile -> compiled -> attached -> ready
初始化 创建完成 编译前 编译完成 绑定事件 加载完成
detached 解绑事件
beforeDestroy 销毁前
destroyed 销毁完成
3.将数据及模板编译后填充到对应的元素内
var aVue = new Vue({ data: { firstName: 'Walter', lastName: 'White', alias: 'Heisenberg' }, template: '<p>{{firstName}} {{lastName}} aka {{alias}}</p>' });
aVue.$mount(‘#editor-box');
4.修改vm的值后,视图更新的回调
var vm = new Vue({
el: '#example',
data: {
msg: '123'
}
})
vm.msg = 'new message'// change data
vm.$el.textContent === 'new message'// false
Vue.nextTick(function () {
vm.$el.textContent === 'new message'// true
})
var vm = new Vue({
data: {
msg: 'hi'
},
computed: {
example: function () {
return Date.now() + this.msg
}
}
})
5.属性合并
全局组件属性定义,其他所有组件都会继承到其中的定义
Vue.mixin({
created: function () {
var myOption = this.$options.myOption
if (myOption) {
console.log(myOption)
}
}
})
局部属性定义及合并
var mixin = {
created: function () {
console.log('mixin hook called')
}
}
new Vue({
mixins: [mixin],
created: function () {
console.log('component hook called')
}
})
// -> "mixin hook called"
// -> "component hook called"
6.过滤器
// 默认传入当前值
Vue.filter('reverse', function (value) {
return value.split('').reverse().join('')
})
<!-- 'abc' => 'cba' -->
<span v-text="message | reverse"></span>
// 动态参数
Vue.filter('reverse', function (value, otherArg) {
console.log(otherArg); // true
return value.split('').reverse().join('')
})
<!-- 'abc' => 'cba' -->
<span v-text="message | reverse true"></span>
// 针对v-model的过滤器(双向数据绑定的值)
Vue.filter('currencyDisplay', {
// model -> view
// formats the value when updating the input element.
read: function(val) {
return'$'+val.toFixed(2)
},
// view -> model
// formats the value when writing to the data.
write: function(val, oldVal) {
var number = +val.replace(/[^\d.]/g, '')
returnisNaN(number) ? 0 : parseFloat(number.toFixed(2))
}
})
<input type="text" v-model="money | currencyDisplay"> | |
<p>Model value: {{money}}</p> |
7.自定义指令
# 示例1
<div id="demo" v-demo:hello.a.b="msg"></div>
|
Vue.directive('demo', {
bind: function () {
console.log('demo bound!')
},
update: function (value) {
this.el.innerHTML =
'name - ' + this.name + '<br>' +
'expression - ' + this.expression + '<br>' +
'argument - ' + this.arg + '<br>' +
'modifiers - ' + JSON.stringify(this.modifiers) + '<br>' +
'value - ' + value
},
unbind: function(){
console.log(‘demo unbind...');
}
})
var demo = new Vue({
el: '#demo',
data: {
msg: 'hello!'
}
})
|
#示例2
<div v-demo="{ color: 'white', text: 'hello!' }"></div>
Vue.directive('demo', function (value) {
console.log(value.color) // "white"
console.log(value.text) // "hello!"
})
8.组件
#异步组件
Vue.component('async-example', function (resolve, reject) {
setTimeout(function () {
resolve({
template: '<div>I am async!</div>'
})
}, 1000)
})
Vue.component('async-webpack-example', function (resolve) {
// this special require syntax will instruct webpack to
// automatically split your built code into bundles which
// are automatically loaded over ajax requests.
require(['./my-async-component'], resolve)
})
|
# 注册及使用
<div id="example">
<my-component></my-component>
</div>
// define
var MyComponent = Vue.extend({
template: '<div>A custom component!</div>'
})
// register
Vue.component('my-component', MyComponent)
// create a root instance
new Vue({
el: '#example'
})
#组件继承
var Child = Vue.extend({ /* ... */ })
var Parent = Vue.extend({
template: '...',
components: {
// <my-component> will only be available in Parent's template
'my-component': Child
}
})
#组件动态参数传递
<div>
<input v-model="parentMsg">
<br>
<child v-bind:my-message="parentMsg"></child>
<!— <child :my-message="parentMsg"></child> ->
</div>
Vue.component('child', {
// camelCase in JavaScript
props: ['myMessage'],
template: '<span>{{ myMessage }}</span>'
})
// 属性绑定不同写法的差异
<!-- this passes down a plain string “1” 1为字符串类型 -->
<comp some-prop="1"></comp>
<!-- this passes down an actual number 1为数字类型 -->
<comp :some-prop="1"></comp>
# v-on for Custom Events 给子组件绑定自定义事件
<child v-on:child-msg="handleIt"></child>
#子组件引用
<div id="parent">
<user-profile v-ref:profile></user-profile>
</div>
var parent = new Vue({ el: '#parent' })
// access child component instance
var child = parent.$refs.profile
#single slot
For example, suppose we have a
multi-insertion
component with the following template:
<div>
<slot name="one"></slot>
<slot></slot>
<slot name="two"></slot>
</div>
|
Parent markup:
<multi-insertion>
<p slot="one">One</p>
<p slot="two">Two</p>
<p>Default A</p>
</multi-insertion>
|
The rendered result will be:
<div>
<p slot="one">One</p>
<p>Default A</p>
<p slot="two">Two</p>
</div>
|
<my-component
:foo="baz"
:bar="qux"
@event-a="doThis"
@event-b="doThat">
<!-- content -->
<img slot="icon" src="...">
<p slot="main-text">Hello!</p>
</my-component>
9.组件场景切换动画
<div v-if="show" transition="expand">hello</div>
new Vue({
el: '...',
data: {
show: false,
transitionName: 'fade'
}
})
/* always present */
.expand-transition {
transition: all .3s ease;
height: 30px;
padding: 10px;
background-color: #eee;
overflow: hidden;
}
/* .expand-enter defines the starting state for entering */
/* .expand-leave defines the ending state for leaving */
.expand-enter, .expand-leave {
height: 0;
padding: 010px;
opacity: 0;
}
Vue.transition('bounce', {
// Vue will now only care about `animationend` events
// for this transition
type: ‘animation',
enterClass: 'bounceInLeft',
leaveClass: 'bounceOutRight'
})
// 场景切换动画 - 事件监听
Vue.transition('expand', {
beforeEnter: function (el) {
el.textContent = 'beforeEnter'
},
enter: function (el) {
el.textContent = 'enter'
},
afterEnter: function (el) {
el.textContent = 'afterEnter'
},
enterCancelled: function (el) {
// handle cancellation
},
beforeLeave: function (el) {
el.textContent = 'beforeLeave'
},
leave: function (el) {
el.textContent = 'leave'
},
afterLeave: function (el) {
el.textContent = 'afterLeave'
},
leaveCancelled: function (el) {
// handle cancellation
}
})
相关推荐
Vue.js 是一款流行的轻量级前端JavaScript框架,用于构建用户界面。它以其声明式的数据绑定、组件化开发和简易的学习曲线而备受开发者喜爱。在这个"Vue.js前端开发实战-自测卷和课后习题答案"的压缩包中,包含了与...
Vue.js是一个流行的JavaScript框架,它支持开发者以数据驱动的方式来构建用户界面。在Vue.js中,样式动态绑定是实现界面变化的关键特性之一。Vue.js提供了灵活的方式来根据数据的变化动态地切换和应用CSS类和内联...
构建大型 Vue.js 项目的10条建议可以帮助开发者在面对复杂应用时保持代码的高效性和可维护性。以下是对这些建议的详细说明: 1. **利用 Slot 提高组件复用性**: - Slot 是 Vue.js 中的关键特性,允许在组件内部...
#### 小结 以上三步为我们展示了如何在Vue.js应用中调用Android原生操作。这种方法不仅增强了应用的功能性,也提高了跨平台应用的灵活性。需要注意的是,在实际开发过程中还需考虑安全性问题,确保只允许可信的...
Vue.js是一个数据驱动的web界面库。Vue.js只聚焦于视图层,可以很容易的和其他库整合。代码压缩后只有24kb。 以下代码是Vue.js最简单的例子, 当 input 中的内容变化时,p 节点的内容会跟着变化。 <!-- ...
### 小结 从源码层次看 Vue 供应的 Vue.set()和this.$set()这两个 API 还是很简洁的,由于本文没有具体解释 Vue 依靠收集和触发,所以有的地方说的还是很模糊。Vue.set()和this.$set()可以用来向响应式对象添加新的...
### 小结 通过以上介绍,我们了解了 Vue.js 中几种常用的基本指令及其应用场景。这些指令能够帮助开发者更高效地管理和操作 DOM,同时提升用户体验。理解并熟练掌握这些指令对于 Vue 开发者来说至关重要。接下来的...
Vue.js是一套构建用户界面的渐进式框架,由尤雨溪创建,专注于数据的驱动和组件化的开发。Vue.js 2.0作为Vue.js的主要版本之一,对原有框架进行了诸多改进和新增特性,使其更加完善和强大。下面,我们将对Vue.js 2.0...
Vue.js是一种构建用户界面的渐进式JavaScript框架。它主要用于构建交互式的前端应用,通过MVVM模式进行数据双向绑定和依赖收集,使得开发者可以更方便地进行前端开发。下面我们将详细解释Vue.js中的几个核心概念。 ...
Vue.js 是一款轻量级的前端JavaScript框架,它以其组件化开发、易学易用、高性能等特性在Web开发领域中备受青睐。本项目实战主要针对"双色球单式机选"功能的实现,旨在帮助开发者理解Vue.js在实际项目中的应用。 ...
#### 六、小结 本文详细介绍了在 Node.js 环境下安装和配置 Vue-cli 的过程,包括准备工作、全局安装 Vue-cli、创建新项目、启动项目以及获取更多文档资源的方法。通过这些步骤,您可以轻松地利用 Vue-cli 快速搭建...
Vue.use 源码学习小结 本文主要讲解了 Vue.use 源码学习小结,介绍了 Vue.use 的源码实现机制,并对其进行了详细的分析和解释。 Vue.use 的作用 Vue.use 的主要作用是提供一个全局注册/调用的能力,允许开发者...
Vue.js 是一款轻量级、高性能的前端JavaScript框架,广泛用于构建用户界面。源码学习对于深入理解其工作原理、优化代码以及提升开发能力至关重要。本压缩包“vue-course源码学习.zip”包含了与Vue.js源码学习相关的...
Vue.directive 是 Vue.js 中用于创建自定义指令的API,它允许开发者扩展Vue的模板语法,实现对DOM元素的特殊操作。在使用Vue.directive时,有几点需要注意: 1. **指令注册时机**: - 必须在Vue实例创建之前注册...
Vue.js是一种流行的JavaScript框架,用于构建用户界面和单页应用程序。在Vue.js中,指令是扩展的HTML属性,它们带有前缀“v-”,用来将数据绑定到DOM上。本文主要介绍Vue.js中常用的指令,包括数据渲染、条件渲染...
Vue.js是一种构建用户界面的渐进式JavaScript框架,主要用于构建单页应用程序。从提供的文件内容中,我们可以提炼出关于Vue.js项目开发中的核心知识点,具体包括滚动监听钩子、时间求解、加载策略、路由管理、状态...