前端随心记---------vuejs基础学习3.0

watch ch 和cpmpute的区别:

1.watch 表示监听某个模型变量的状态变化。watch监视的东西多一些,computed所依赖的东西都写在一个函数里。

2.特殊场景:如果业务出现了异步操作(回调函数)则这个时候computed是存在返回值,不能在使用,但是watch里面的没有返回值的概念,可以进行异步代码的调用。

小案例代码:

<script type="text/javascript">
    var vm = new Vue({
        el: ‘#box‘,
        data: {
            username: ‘‘,
            msg: ‘‘,
        },
        // computed 完成信息的校验 同步校验,在本地做一些合法性的校验; 最关键检验用户名是否重复
        // 异步操作 ajax请求 校验用户名是否合法
        watch: {
            username: function () {
                // 检测用户名
                if( !this.username ) {
                    this.msg = ‘‘;
                    return; // 只是为了终止代码执行
                }

                if( this.username.length < 3 ){
                    this.msg = ‘* 用户名的长度不能小于3个‘;
                    return; // 只是为了终止代码执行
                }

                if( this.username.length > 10 ){
                    this.msg = ‘用户名的长度不能大于 10个‘;
                    return; // 只是为了终止代码执行
                }
                // 发送ajax请求进行操作
                var _That = this; // 方式一
                $.ajax({
                    url: ‘./check.json‘,
                    type: ‘GET‘,
                    dataType: ‘json‘,
                    // 方式二: 使用箭头函数 es5习惯
                    success: (json) => {

                        console.log(json);

                        if( !json[‘status‘] ){

                            console.log(this); // ajax对象

                            this.msg = ‘用户名已经被注册,不能在使用了‘;
                        }
                        // return json[‘status‘]; // 是否可以return出去

                    }
                });
                return ‘信息合法‘;
            }
        }

    })
</script>

在案例中,如果使用computed,无法获取ajax验证之后的状态,在异步ajax中无法return 状态。从而使用watch。

watch的深度监控:

 watch: {
            //  改成了一个对象,属性值 handler 固定写法
            lists: {
                handler: function (newVal, oldVal) {
                    console.log(‘lists change....‘)
                },
                deep: true,
                // 代表开启深度监控。意思数据的任何一个属性发生变化,监视函数需要执行
                immediate: true,
                // 如果immediate 设置为true, 代表代码一加载 立马执行监视函数。

            }
        }

小案例:

http://todomvc.com/
<!DOCTYPE html>
<html lang="zh_CN">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--1. 引入 bootstrap-->
    <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet">

    <script src="https://cdn.bootcss.com/jquery/2.0.1/jquery.js"></script>

    <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.js"></script>

    <style>
        .del{
            text-decoration: line-through;
            color: #ccc;
        }
    </style>

</head>

<body>
<nav class="navbar navbar-inverse">
    <div class="container-fluid">
        <div class="navbar-header">
            <a class="navbar-brand" href="#">
                VUEJS_TODO
            </a>
        </div>
    </div>
</nav>

<div class="container" id="app">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <div class="panel panel-success">
                <div class="panel-heading">
                    <h3>-_-, 还有 {{onData}} 件事未完成</h3>
                    <input type="text" class="form-control" v-model="title" @change="addItem">
                </div>
                <div class="panel-body">
                    <ul class="list-group">
                        <li   @dblclick="editItem(todo)"
                              style="cursor:pointer;"
                              class="list-group-item"
                              :class="{del: todo.isComplice}"
                              v-for="todo in newData"

                        >

                            <div v-show="curItem !== todo">
                                <input type="checkbox"

                                       v-model="todo.isComplice"> {{ todo.title }}
                                <button type="button"
                                        @click="removeItem(todo)"
                                        class="btn btn-danger btn-xs pull-right">&times;
                                </button>
                            </div>

                            <input type="text"
                                   @blur="cancel"
                                   @change.13="cancel"

                                   v-show="curItem === todo"

                                   class="form-control"
                                   v-model="todo.title"

                                   v-focus="curItem === todo"

                            >

                        </li>
                    </ul>

                </div>
                <div class="panel-footer">
                    <ul class="nav nav-pills">
                        <li :class="{active:hash===‘all‘}"><a href="#/all">全部</a></li>
                        <li :class="{active:hash===‘finish‘}"><a href="#/finish">已完成</a></li>
                        <li :class="{active:hash===‘unfinish‘}"><a href="#/unfinish">未完成</a></li>
                    </ul>

                </div>
            </div>
        </div>
    </div>
</div>

</body>
<!--2. vuejs-->
<script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
<script>
  new Vue({
      el:‘#app‘,
      directives: {
          focus: function (el, bindings) {
              if (bindings.value) {
                  el.focus();
              }
          }
      },
      data:{
          curItem:‘‘,
          hash:‘‘,
          title:‘‘,
          isComplice:‘‘,
          title:‘‘,
          todos:[
      {
          title:‘吃饭‘,
          isComplice:true,
      },
      {
          title:‘吃饭‘,
          isComplice:false,
      },
      {
          title:‘吃饭‘,
          isComplice:false,
      }
  ]},

      methods:{
          addItem:function () {
              this.todos.push({title:this.title,isComplice:false});
              this.title=‘‘;
          },
          removeItem:function (eles) {
              this.todos = this.todos.filter(function (ele) {
                  return ele !== eles;
              })
          },

          editItem:function (elee) {
              this.curItem=elee;
          },
          cancel: function () {
        this.curItem = ‘‘;// 清空当前项
         }

      },
        computed:{
          onData:function () {
            return  this.newData.filter(function (ele) {
                  return  !ele.isComplice;
              }).length;
          },
            newData:function () {
                if(this.hash==‘finish‘){
                    return this.todos.filter(function (ele) {
                        return ele.isComplice;
                    })
                }
                if(this.hash==‘unfinish‘){
                    return this.todos.filter(function (ele) {
                        return !ele.isComplice;
                    })
                }
                return  this.todos;

            }

        },

      watch:{
          todos:{
              handler:function (newVal,oldVal) {
                localStorage.setItem(‘toDoData‘,JSON.stringify(this.todos));
              },
              deep:true,
          },
      },
      created:function () {
          this.todos=JSON.parse(localStorage.getItem(‘toDoData‘))||this.todos;
          window.addEventListener(‘hashchange‘, ()=> {
             this.hash= location.hash.slice(2);
          },false);
      },

  })

</script>
</html>


原文地址:https://www.cnblogs.com/hudunyu/p/11428719.html

时间: 2024-11-08 22:30:07

前端随心记---------vuejs基础学习3.0的相关文章

前端随心记---------vuejs基础学习2.2

过滤器 filter过滤器,说白了就是一个函数. 在vuejs1.版本里面存在很多过滤器,在vuejs2.版本里面被移除 存在两种方式定义过滤器   : 1.全局     2.局部 全局: Vue.filter('filterName1', function(input, ...ret){ return ; }); Vue.filter('filterName2', function(input, ...ret){ return ; }); 局部: new Vue({ el: '', filte

前端随心记---------vuejs流行的UI框架

一:Element element ui框架的按钮组件,这款由饿了么前端开源的UI框架,一经面世,就收获大量程序员的芳心.在github 上更是高达29.8k的star早已说明一切.用于开发PC端的页面还是绰绰有余的.如果说你是用vue开发者,却没用过element UI,那你肯定不是合格的vue开发者. 文档地址:http://element-ui.cn 二:iview iView 是一套基于 Vue.js 的开源 UI 组件库,主要服务于 PC 界面的中后台产品.使用单文件的 Vue 组件化

前端随心记---------HTTP基础

   HTTP HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准.HTTP是一个基于TCP/IP通信协议来传递数据 HTTP 工作原理 HTTP协议工作于客户端-服务端架构上.浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求.Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等.Web服务器根据接

前端随心记---------HTML5+CSS系列3.0

表单 u 表单的作用:用来收集用户的信息的; 表单框 : 表单 ?表单的作用:用来收集用户的信息的; 表单框 : <form name="表单名称" method="post/get" action="提交地址"> </form> <input type="text" value="默认值"/> 文本框 <input type="password"

前端随心记---------HTML5+CSS系列2.0

超链接的应用: 语法:    <a href="连接地址" title="提示信息" target=”属性值”> 链接文本/图片</a> 属性(名):target:页面打开方式 默认属性值:_self. I当前窗口 属性值:_blank 新窗口打开  <a href="#">空链接</a>  HTML标记的语法是 1.双标记: <标记(签)名称 属性1名="属性1值" 属性

前端随心记---------HTML5+CSS系列4.0

盒模型 一. 盒模型的概念和组成 盒子模型是CSS的基石,指定标签如何显示以及元素间相互关系:  页面上的每个元素都被当成一个矩形盒子,占据一定的页面空间,这个盒子由内容(content).内边距(补白,填充,padding).边框(border)和外边界(margin)组成: 1) padding内填充 padding区域在border与content之间: 背景色和背景图像会覆盖padding和content组成的区域: padding的使用方法 padding,在设定页面中一个元素内容到元

前端随心记---------vue3.0终于来了,作者已公布源码

Vue3.0 何去何从? 就在国庆的第五天,10月5日凌晨,web前端开发框架Vuejs的作者:尤雨溪在微博宣布Vue3.0版本终于要面正式推出了!  其实,在11月14日-16日于多伦多举办的 VueConf TO 2018 大会上,尤雨溪发表了名为 “ Vue 3.0 Updates ” 的主题演讲,对 Vue 3.0 的更新计划.方向进行了详细阐述. 1.更快 Virtual DOM 完全重写,mounting & patching 提速 100% : 更多编译时(compile-time

前端随心记(一)

前端 基础易错题(一) 案例一::介绍js原型链继承原理,以及prototype和--proto--的区别! 1.任何一个构造函数都有一个属性prototype叫做构造函数的原型,是一个对象,并且该对象默认情况下指向Object实例,constructor指向当前构造函数,--proto--指向Object.protopyte. 2.使用构造函数实例化的对象存在一个--proto--属性,指向当前构造函数的prototype. 3.当我们调用实例对象的属性和方法时,先在自身上面进行查找[自己身上

前端随心记---------React简介(1)

React 简介: React 是一个用于构建用户界面的 JAVASCRIPT 库. React 主要用于构建UI,很多人认为 React 是 MVC 中的 V(视图). React 起源于 Facebook 的内部项目,用来架设 Instagram 的网站,并于 2013 年 5 月开源. React 拥有较高的性能,代码逻辑非常简单,越来越多的人已开始关注和使用它. React诞生的原因 主要是当时市面上的这些框架都无法满足 facebook 公司的业务需求 (1. 数据量很大,数据不好管理