Vue2.0笔记——Vue常用实例属性,实例方法

实例属性

  • vm.$el
  • vm.$data
  • vm.options
  • vm.$refs
  • vm.$root

vm.$el

该实例属性用于获取Vue实例使用的根DOM元素,即el选项所指的元素DOM

<body>
<div id="app">
    <h4>你好,这是四级标题</h4>
    <p>这是一个段落,我什么都不想说</p>
</div>
<button onclick="getEl()">获得el选项的DOM元素</button>
<script>
    var vm = new Vue({
        el:‘#app‘
    })
    function getEl(){
        console.log(vm.$el);//获得DOM元素
        vm.$el.style.color=‘red‘;//设置字体颜色
    }
</script>
</body>

vm.$data

Vue 实例观察的数据对象。Vue 实例代理了对其 data 对象属性的访问。
即可以访问data选项中的数据。

<button onclick="getData()">vm.$data获得数据值</button>
data:{
    msg:‘你好你好‘,
    arr:[‘what‘,‘are‘,‘you‘,‘doing‘,‘?‘]
}
function getData(){
    console.log(vm.$data.msg);
    console.log(vm.$data.arr.join(‘ ‘));
}

获得msg属性,获得arr数组,并通过join生成字符串。

vm.$options

用于当前 Vue 实例的初始化选项。需要在选项中包含自定义属性时会有用处。:

var vm = new Vue({
    el:‘#app‘,
    data:{
        msg:‘你好你好‘,
        arr:[‘what‘,‘are‘,‘you‘,‘doing‘,‘?‘]
    },
    name:‘小小陈先森‘,
    user:{name:‘小小陈先森‘,age:18,sex:‘男‘},
    show(){
            console.log(this.user.sex);
    }
})

console.log(vm.$options.name);
console.log(vm.$options.user.age);
console.log(vm.$options.show());

这个自定义属性,就是跟data选项同级,定义的属性或方法函数。通过$options可以操作调用。

vm.$refs

返回持有注册过 ref 特性 的所有 DOM 元素和组件实例,该类型为Object,且只读。
因为有好多ref,所以通过.名称获得组件实例。

<input type="text" ref="name" value="this is text"/>
<p ref="hello">HelloWorld</p>

console.log(vm.$refs.hello);
vm.$refs.name.value=‘whats‘;//.style.color=‘red‘;

Vue实例中不需要任何设置,只要持有ref属性的元素在根节点元素中即可。

vm.$root

当前组件树的根 Vue 实例。如果当前实例没有父实例,此实例将会是其自己。

console.log(vm.$root);

若果只有这个一个vm实例,那么么vm.$root将返回自己,返回自己,直接相当于vm。

其他几个实例属性,将在讲解组件的时候介绍,而且组件很重要。

实例方法(数据操作)

vm.$watch

语法:

vm.$watch( expOrFn, callback, [options] )

观察Vue实例变化中的一个表达式或计算属性函数。监视某个属性,如果被更该,将执行回调函数。
表达式只接受监督的键路径。对于更复杂的表达式,用一个函数取代。

  • 第一个参数为表达式或计算属性函数,也可以是一个属性。
  • 第二个参数为,触发的回调函数
  • 第三个参数为,可添加的选项
    <input type="text" v-model="msg">
    data:{
    msg:‘你好你好‘
    }
    vm.$watch(‘msg‘,function(newVal,oldVal){
    console.log(‘新值为:‘ + newVal + ‘,旧值为:‘ +oldVal);
    });

    你可以把第一个参数设置为计算属性函数。

    vm.$watch(
        function(){
            return Number(this.a) +Number(this.b);
        },
        function(newVal,oldVal){
            console.log(‘新值为:‘ + newVal + ‘,旧值为:‘ +oldVal);
        }
    );

    另外vm.$watch返回一个取消观察函数,用来停止触发回调:

    var unwatch = vm.$watch(‘a‘, cb)
    // 之后取消观察
    unwatch()

    一旦执行unwatch()函数,就不会触发回调,且不再监视它。

    [options]可选参数,可以放值deep:true,用来深度监视。
    immediate:true,立即以表达式的当前值触发回调。
    另外vm.$watch方法与实例的watch选项具有相同的作用。

vm.$set

语法:

vm.$set( target, key, value )

参数:

  • {Object | Array} target
  • {string | number} key
  • {any} value
    设置对象的属性。如果对象是响应式的,确保属性被创建后也是响应式的,同时触发视图更新
    示例:
    data:{
    user:{
        id:1001,
            name:‘tom‘
        }
    }
    
    //通过普通方式为对象添加属性时vue无法实时监视到
    this.user.age=25;
    //通过vue实例的$set方法为对象添加属性,可以实时监视
    this.$set(this.user,‘age‘,18);
    //通过全局API方式设置,全局API在后面介绍
    Vue.set(this.user,‘age‘,22);

    注意对象不能是 Vue 实例,或者 Vue 实例的根数据对象

vm.$delete

语法:

Vue.delete( target, key )

参数:

  • {Object | Array} target
  • {string | number} key/index

    仅在 2.2.0+ 版本中支持 Array + index 用法。

删除对象的属性。如果对象是响应式的,确保删除能触发更新视图。

//使用js的方式无效
delete this.user.age;
//使用vm.$delete
vm.$delete(this.user,‘name‘);
//使用全局API的方式
Vue.delete(this.user,‘age‘);

目标对象不能是一个 Vue 实例或 Vue 实例的根数据对象。

实例方法(事件操作)

vm.$on,vm.$emit

语法:

vm.$on( event, callback )

监听当前实例上的自定义事件。事件可以由vm.$emit触发。回调函数会接收所有传入事件触发函数的额外参数。
语法:

vm.$emit( event, […args] )

触发当前实例上的事件。附加参数都会传给监听器回调。
示例:

<div id="app">
    <p v-on:click="test($event,‘123‘)">自定义事件</p>
</div>
methods:{
    test(event,num){
        vm.$emit(‘test‘,num);
    }
}

vm.$on(‘test‘,function(num){
    console.log(‘已监听,并执行回调函数‘);
    console.log(‘获得的值为:‘ + num);
});

当单击p标签文字时,将触发自定义的单击事件test,我们可以在test函数里进行单击后的操作。
通过vm.$on监听这个自定义的test事件,可以执行回调函数,但是它需要通过vm.$emit方法来触发,第一个参数为自定义事件名,第二个参数为附加参数。

vm.$emit方法在父子组件中也用于子组件向上传递数据。

vm.$once

语法:

vm.$once( event, callback )

监听一个自定义事件,但是只触发一次,在第一次触发之后移除监听器。
示例:

<button v-on:mouseover="mouseover">只执行一次监听</button>

methods:{
    mouseover(){
        console.log(‘移动到了此节点‘)
        vm.$emit(‘mouseover‘);//可随时,在任何处触发.
    }
}

vm.$once(‘mouseover‘,function(){
    console.log(‘已监听,并执行回调函数‘);
});

通过测试发现,第一次触碰按钮,将打印“移动到了此节点”,“已监听,并执行回调函数”,但是,等第二次在触碰则只打印“移动到了此节点”。将不会在调用监听的回调函数,因为它已不再被监听。

vm.$off

语法:

vm.$off( [event, callback] )

移除自定义事件监听器。

  • 如果没有提供参数,则移除所有的事件监听器;
  • 如果只提供了事件,则移除该事件所有的监听器;
  • 如果同时提供了事件与回调,则只移除这个回调的监听器。

实例方法(生命周期)

vm.$mount

语法:

vm.$mount( [elementOrSelector] )

如果 Vue 实例在实例化时没有收到 el 选项,则它处于“未挂载”状态,没有关联的 DOM 元素。可以使用 vm.$mount() 手动地挂载一个未挂载的实例。
这个方法返回实例自身,因而可以链式调用其它实例方法。
示例:

vm.$mount(‘#app‘);
//或
var vm=new Vue({
    data:{
        msg:‘小小陈先森‘,
        name:‘tom‘
    }
}).$mount(‘#app‘);

查看Vue实例生命周期

vm.$forceUpdate()

迫使 Vue 实例重新渲染。注意它仅仅影响实例本身和插入插槽内容的子组件,而不是所有子组件。

vm.$nextTick( [callback] )

将回调延迟到下次 DOM 更新循环之后执行。在修改数据之后立即使用它,然后等待 DOM 更新。
在DOM更新完成后再执行回调函数,一般在修改数据之后使用该方法,以便获取更新后的DOM。
举个小例子:

<p ref="thisP">{{name}}</p>

data:{
    name:‘小小陈先森‘
}
//js代码
vm.name=‘Tom‘;
console.log(vm.$refs.thisP.textContent);

如果你没有添加最后一行的.textContent,那么你执行起来也没什么数据的错误。
设置为“Tom”值,console.log依然为“Tom”。如果你加上.textContent或的其内容。
你会发现,虽然设置了值为“Tom”,但打印控制台在依然为“小小陈先森”。
原因:
就如,该函数的介绍所说,当实例渲染加载完毕后显示Tom,但因为Vue数据更新后,需要渲染视图,所以需要等待这块DOM更新后才能显示出新值,而js代码执行较快,而直接通过.$refs获得了内容,没等得及DOM加载渲染完毕。
而此方法就是来处理它的。
代码:

vm.$nextTick(function(){
    console.log(vm.$refs.thisP.textContent);
});

将其放在回调函数里,等DOM执行完后,在执行回调函数。这样就额可以了。

vm.$destroy()

完全销毁一个实例。清理它与其它实例的连接,解绑它的全部指令及事件监听器。
触发 beforeDestroy 和 destroyed 的钩子函数。

在大多数场景中你不应该调用这个方法。最好使用 v-if 和 v-for 指令以数据驱动的方式控制子组件的生命周期。

原文地址:http://blog.51cto.com/zouzhelu/2105561

时间: 2024-12-07 08:56:41

Vue2.0笔记——Vue常用实例属性,实例方法的相关文章

Vue2.0笔记——Vue实例

Vue实例 每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的: var vm = new Vue({ // 选项 }) 当创建一个 Vue 实例时,你可以传入一个选项对象,就如前面所提到的如:data,methods,computed,watch等等.一个 Vue 应用由一个通过 new Vue 创建的根 Vue 实例,以及可选的嵌套的.可复用的组件树组成.举个例子,一个 todo 应用的组件树可以是这样的: 根实例Root └─ TodoList ├─ TodoIte

vue的实例属性$options

vue的实例属性$options是用来获取定义在data外的数据和方法的. <script> export default { name: "Test", data() { return { }; }, //在data外面定义的属性和方法通过$options可以获取和调用 name: "zs", age: 12, haha() { console.log("haha"); }, created() { console.log(this

Vue2.0笔记——组件

组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.组件是自定义元素,Vue.js 的编译器为它添加特殊功能. 使用组件 组件的注册与使用 全局注册 我们需要通过一个全局的API来构造.Vue.extend(options)用法:使用基础 Vue 构造器,创建一个"子类".参数是一个包含组件选项的对象.同时还需要一个API通过这个构造器来注册组件,之后才能使用.Vue.component(id, [definition])用

Vue2.0总结———vue使用过程常见的一些问题

Vue目前的的开发模式主要有两种: 1.直接页面级的开发,script直接引入Vue 2.工程性开发,webpack+loader或者直接使用脚手架工具Vue-cli,里面的文件都配置好了 webpack可以进行配置,配置多文件入口,进行多页面开发 第二种Vue开发,结合webpack打包完文件会很大,怎么解决这个问题? 1.webpack代码拆分:code-spliting 2.提取公共(如提取css,js) 3.预渲染:使用prerender-spa-plugin插件 4.后台----开启压

Vue2.0笔记——{{}}模板与自定义过滤器

模板语法 让我们回到最开始 <div id="app"> <h1>{{message}}</h1> </div> <script> var vm = new Vue({ el:'#app', data:{ message:'HelloWorld' } }) </script> 这是一个HelloWorld,简单的通过模板输出.我们称之为数据绑定,而最常见的就是"Mustache"语法 (双大括号

(一)Python入门-6面向对象编程:02类的定义-类和对象的关系-构造函数-实例属性-实例方法

一:类的定义 如果把对象比作一个“饼干”,类就是制造这个饼干的“模具”. 我们通过类定义数据类型的属性(数据)和方法(行为),也就是说,“类将行为和状态打 包在一起”. 对象是类的具体实体,一般称为“类的实例”.类看做“饼干模具”,对象就是根据这个“模 具”制造出的“饼干”. 从一个类创建对象时,每个对象会共享这个类的行为(类中定义的方法),但会有自己的属 性值(不共享状态).更具体一点:“方法代码是共享的,属性数据不共享”. Python中,“一切皆对象”.类也称为“类对象”,类的实例也称为“

Vue2.0笔记——属性绑定和Class与Style绑定

属性绑定 通过指令v-bind可以绑定属性,该指令同v-on一样,也有一个简写,":"冒号.绑定元素的属性,并且可与元素的原属性共存.当原属性有值时则显示原属性的值,无值则使用绑定的值. <div id="app"> <img :src="url" :width="width" width="800" :height="height"/> </div>

Vue2.0笔记——组件2

组件组合 父子组件的通信 组件 A 在它的模板中使用了组件 B.它们之间必然需要相互通信:父组件可能要给子组件下发数据,子组件则可能要将它内部发生的事情告知父组件. 首先,需要在Vue实例里定义一个组件,设置data,然后在这个组件里再添加一个conponents选项,注意不要添错位置.示例: <div id="app"> <my-father></my-father> </div> //父组件的模板 <template id=&q

Vue2.0笔记——vue-router路由

简介 使用Vue.js开发SPA(Single Page Application)单页面应用.vue-router可以通过html5的history API或者hash实现单页应用,即不刷新跳转,切换地址,只是页面上的组件的切换:vue-router可以实现页面间传参等其他功能: 基本用法 当你要把 vue-router 添加进来,我们需要做的是,将组件(components)映射到路由(routes),然后告诉 vue-router 在哪里渲染它们. 首先我们需要定义链接url,而vue-ro