Vue入门数据驱动摸索(1)

vue作为数据驱动的组件化前端界面库,上手简单。
本文通过以需求为导向的方式,叙述对应需求所需具备的vue知识。

摸索一:页面初始化就需请求数据

vue提供了多个钩子函数,他们对应不同的vue的生命周期,也就是vue实例挂载到DOM的一系列过程。其中created生命周期钩子,对其调用时机为:vue实例被创建之后就会被调用。因此需要实现初始化请求数据,即

 created: function () {
    let self = this;
    self.getData();
  }
  methods:function () {
      getData(){
           /*详细的请求方法*/
      }
  }

methods选项监测数据,将被混入到 Vue 实例中;监听事件等众多逻辑处理均在该方法里编写。

摸索二:数据读写

vue实例需要配置数据观测(data observer),同时,改写更新数据,也是通过对数据追踪变化来达到目的。vue中的data属性用来达到这个需求目的。

data(){
    return {
        initData: {},
        enough:[]
            }
        },
methods:{
    getData(){
        Dom7.ajax({
            url: 'http://url',
            type: 'get',
            dataType: "json",
            success: function(data){
                this.initData = data.data;
                    }
                })
            }
    
        }

示例数据:this.initData = {"a":1,"b":2,"c":[{"name":""wenyi},{"name":"yuanfang"},{"name":null,"tag":true}]}

DOM元素中

<template>
    <div> {{ initData.a }} </div>
</template>

摸索三:用户点击对DOM的结构调整

例如,用户点击一个按钮,隐藏上述二的这行DOM元素

<template>
  <div> {{ initData.a }} </div>
  <div class="js-close" v-on:click="insurClose"></div>
</template>

vue中代码

 methods:{
     insurClose:function () {
        let self = this;
        self.initData.a = '';
    }
 }

摸索四:循环列表中某一行做状态变更

应用场景:提交按钮前,验证所需条件(循环列表的每一行)是否符合规定,不具备则标红提醒;
vue代码

methods:{
    getData(){
        Dom7.ajax({
            url: 'http://url',
            type: 'get',
            dataType: "json",
            success: function(data){
                this.initData = data.data;
                /*初始化不飘红的标志字段,值都为false*/
                self.initData.c.forEach(function (item,index) {
                                self.enough[index] =false;
                            });
                    }
                })
            }
    /** 验证表单*/
    checkForm:function () {
        let self = this;
        let showToast = true;
        self.initData.c.forEach(function (item,index) {
              if(!item.name){
              /*更新数组、对象里的变量需要使用this.$set*/
             self.$set(self.enough, index, true);/*this.enough[i]是不会被检测到的,vue不允许在已经创建的实例上动态添加新的根级响应式属性,this.$set补充了上述不足之处*/
             showToast = false;
             }

        });
        if(!showToast){
           alert('红色部分表示该行不满足条件');
           return false;
         }
           return true;
   }
}

css代码

/*验证各项,缺少时飘红*/
.enough {
   color: red;
}

html代码

/*index为v-for循环的当前索引,由此达到DOM-数据的对应位置*/
<span v-bind:class="{ enough: enough[index] }">人名显示</span>

这是最近刚接触遇到的部分情况,后期持续更新,也期待大家的建议或更广泛的思路。