VUE实例的属性和方法

转 https://www.jianshu.com/p/79ff79c87e16

VUE属性与方法

属性

vm.$el

#指定要绑定的元素

vm.$data

#Vue 实例的数据对象

vm.$options

#获取自定义属性的值

new Vue({
    customOption: 'foo',  自定义属性
    created: function () {
    console.log(this.$options.customOption) // => 'foo'
    }
        }) 

vm.$refs

#获取所有ref属性的标签

<h2 ref="hello">你好</h2>
    <p ref="world">世界</p>
    console.log(vm.$refs);
     //{hello: h2, world: p}

 

vm.$refs.hello.style.color='blue'; 给标签添加style

实例

<!DOCTYPE html>
<html>
<head>
<title></title>
<script type="text/javascript" src="https://cdn.jsdelivr.net/vue/2.1.3/vue.js"></script>
    </head>
    <body>

    <div id="app">
    <p>{{ message }}</p>
        <h1 ref="hello">注册了ref特性</h1>
</div>

<script type="text/javascript">
var app = new Vue({
        el: '#app',
        data: {
            message : "Hello Vue"
        },
        name:'ren',
        age:23,
      show:function () {
          console.log('show!');
      }
    })
//app.属性名 获取data中属性
    console.log(app.message);// hello vue
//app.$el 获取vue实例中使用的根 DOM元素
    console.log(app.$el);// <div id='app'>...</div>
    app.$el.style.color='red';
//app.$data 获取数据对象data
    console.log(app.$data);// {_ob_:observer}
    console.log(app.$data.message);// hello vue
//app.$options 获取自定义属性和调用自定义方法
    console.log(app.$options.name); //ren
    console.log(app.$options.age); //23
    app.$options.show(); //show!
//app.$refs 获取所有添加过ref属性的元素(一个对象,持有注册过 ref特性 的所有DOM元素和组件实例)
    console.log(app.$refs.hello); //<h1 style="color:blue">注册了ref特性</h1>
    app.$refs.hello.style.color="blue";
    </script>
    </body>
    </html>

方法

vm.$mount()

#手动挂载 //vm.$mount('#itany');

vm.$destroy()

#销毁实例

vm.$delete(object,key)

#删除属性值 Vue.delete(this.user,'age')

vm.$nextTick( [callback] )

将回调延迟到下次 DOM 更新循环之后执行。在修改数据之后立即使用它,然后等待 DOM 更新。

new Vue({
  // ...
  methods: {
    // ...
    example: function () {
      // 修改数据
      this.message = 'changed'
      // DOM 还没有更新
      this.$nextTick(function () {
        // DOM 现在更新了
        // `this` 绑定到当前实例
        this.doSomethingElse()
      })
    }
  }
})

实例

<!doctype html>
<html>

    <head>
        <meta charset="utf-8">
        <title></title>
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
        <link href="../css/mui.min.css" rel="stylesheet" />
    </head>

    <body>
        <div id="content">
            {{msg}}
            <h1 ref="hello">他的名字是:{{name}}</h1>
        </div>
        <script src="../js/mui.min.js"></script>
        <script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            mui.init()
            var vm=new Vue({
                el:"#content",
                data:{
                    msg:"hello world!",
                    name:"小杨"
                }
            })
            
            /**
             * 方法
             */
            //vm.$nextTick(callback) 
            
            //改变数据
            vm.name="大杨";
            //这里打印的还是dom更新之前的数据,因为Dom更新需要时间,还没更新完,Vue实现响应式并不是数据发生改变后dom立即变化
            // console.log(vm.$refs.hello.textContent);//他的名字是:小杨
            
            //正确写法如下,dom更新完成后再执行
            vm.$nextTick(function(){
                //现在dom更新完成
                console.log("利用$nextTick方法:"+vm.$refs.hello.textContent);
            })//他的名字是大杨
        </script>
    </body>
  //页面上显示的是 他的名字是大杨
</html>

 

 实例

<body>
<div  id="content">
    <button @click="updateName()">改变属性值</button>
    <button @click="addAge()">增加一个属性</button>
    <button @click="deleteAge()">删除一个属性</button>
    <div>
        姓名{{user.name}}
        <br>
        年龄:{{user.age}}
    </div>
</div>
<script type="text/javascript">
    var vm = new Vue({
        el: "#content",
        data: {
            user: {
                id: 1000,
                name: "tom"
            }
        },
        methods: {
            updateName: function() {
                this.user.name = "jack";
            },
            addAge: function() {
                // this.user.age=23;//通过普通的方式为对象添加属性时,Vue无法实时监视到

                // this.$set(this.user,'age',23);//通过Vue实例的$set方法为对象添加属性,可以实时监视
                // Vue.set(this.user,'age',23);//还有一种写法,通过全局 Vue.set方法,$set就是全局 Vue.set 的别名

                //示例,当还没有属性时添加属性,有属性就加1
                if(this.user.age){
                    this.user.age++;
                }else{
                    Vue.set(this.user,'age',23);
                }
            },
            deleteAge:function(){
                if(this.user.age){
                    // this.$delete(this.user,'age');//通过Vue实例的$delete方法为对象删除属性
                    Vue.delete(this.user,'age');//通过全局 Vue.delete方法
                }
            }
        }
    })
    </script>
    </body>
    </html>

 

vm.$watch( '监控对象name', callback, [options] )

 观察 Vue 实例变化的一个表达式或计算属性函数。回调函数得到的参数为新值和旧值。表达式只接受监督的键路径。对于更复杂的表达式,用一个函数取代。

watch的参数

handle    就是你watch中需要具体执行的方法
deep:   

 就是你需要监听的数据的深度,一般用来监听对象中某个属性的变化,一般的watch只能监听到data的数据,而监听不到data里面对象的属性改变,这时候就需要deep属性。,deep会给对象的每一个属性绑定handle,如果对象属性过多,可以设置监听单独属性

 watch: {
    'cityName.name': {  //监听data中cityName的name属性变化
      handler(newName, oldName) {
      // ...
      },
      deep: true,
      immediate: true
    }
  }


immediate

在选项参数中指定 immediate: true 将立即以表达式的当前值触发回调,当我们第一次绑定时,不会立刻触发监听函数,只有当监听对象值发生改变时才会触发监听函数,如果我们需要最初绑定值时也执行函数,则需要immediate属性,比如当父组件向子组件动态传值时,子组件props首次获取到父组件传来的默认值时,也需要执行函数,此时就需要将immediate设为true

<div id="content">
    <input type="text" v-model="name" />
    <input type="text" v-model="age" />
    <div>
        姓名{{user.name}}
        <br>
        年龄:{{user.age}}
    </div>

    <!-- 对象监视 -->
    <input type="text" v-model="user.name" />
</div>
<script type="text/javascript">
    var vm = new Vue({
        el: "#content",
        data: {
            name: "rose",
            age: 25,
            user: {
                id: 1000,
                name: "tom"
            }
        },
        watch: { //方式2,是用Vue示例提供的watch选项
            age: function(newValue, oldValue) {
                console.log("age值发生改变,由" + oldValue + "变成了" + newValue);
            },
            user: {
                //监视对象
                handler: function(newValue, oldValue) {
                    //注意:在变异 (不是替换) 对象或数组时,旧值将与新值相同,因为它们的引用指向同一个对象/数组。Vue 不会保留变异之前值的副本。
                    console.log("user对象值发生改变,由" + oldValue.name + "变成了" + newValue.name);
                },
                deep: true //深度监视,当对象中的属性发生变化时也会监视
            }
        }
    });
    //方式1,使用Vue示例的$watch方法监视数据变化
    vm.$watch('name', function(newValue, oldValue) {
        console.log("name值发生改变啦,由" + oldValue + "变成了" + newValue);
    })

 

 

个人

posted @ 2020-07-02 14:34  Ren小白  阅读(510)  评论(0)    收藏  举报
levels of contents