zoukankan      html  css  js  c++  java
  • vue过滤器

    一.过滤器filter

      概念:Vue.js 允许你自定义过滤器,可被用作一些常见的文本格式化。过滤器可以用在两个地方:mustache 插值和 v-bind 表达式。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符指示;

      代码:

      注意:全局的过滤器名称是带有引号的,而局部是不带引号的

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script src="js/vue.js"></script>
    </head>
    <body>
        <div id='app'>
            <!-- 一个过滤器可以传多个参数 -->
            <!-- 一条数据也可以用多个过滤器处理,用管道符拼接 -->
            <p>{{msg | msgFormat('','大家把') | test}}</p>
    
        </div>
    
        
        <script>
              // 定义一个 Vue 全局的过滤器,名字叫做  msgFormat
              //固定格式Vue.filter('过滤器名字',function(data){函数内容})
              //过滤器第一个位置已经被占用了就是过滤器要处理的那个对象,调用过滤器的那个对象
              //可以传入多个参数,打一个位置的实参不用写,形参要写
            //还有,顾虑完的结果必须return
            Vue.filter('msgFormat',function(msg,arg1,arg2){
                // 字符串的  replace 方法,第一个参数,除了可写一个 字符串之外,还可以定义一个正则
                return msg.replace(/喜欢/g,arg1+arg2)
            })
    
            //另一个过滤 器
            Vue.filter('test',function(data){
                return data+'============='
    
            })
    
            let vm=new Vue({
                el:'#app',
                data:{
                    msg:'我喜欢你,也不知道喜欢什么,可能就是喜欢上你吧'
    
                },
                //filters带s是一个对象,这个在一个vm对象,所有是一个局部过滤器
                 filters:{
                    trans: function(value){
                        // 必须要使用return 把过滤后的内容返回
                        return value.toUpperCase();
                    }
    
            })
        </script>
    </body>
    </html>
    View Code

    二.侦听事件

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script src='js/vue.js'>  </script>
    </head>
    <body>
        <div id="app">
            <span @click='num++'>+</span>
            <input type="text" v-model='num'> 
            <span @click='num--'>-</span>
    
        </div>
        <script>
            //侦听属性
            //这边的属性是指data中的数据
            let vm=new Vue({
                el:'#app',
                data:{
                    num:0
                },
                //watch;里面的方法会在在data的数据发生改变的时候,自动执行
                watch:{
                    //格式:要观察的变量名:function(变化后的值,变化前的值){}
                    num:function(v1,v2){
                        if(v1<0){
                            this.num=0;
                        }
                    }
    
                }
            })
        
        </script>
    
    
    </body>
    </html>
    View Code

    三.计算computed(和过滤差不多,都是对字符串进行处理)

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script src='js/vue.js'>  </script>
    </head>
    <body>
        <div id="app">
            <span>{{str}}</span>
            <span>{{computed_str}}</span>
        </div>
        
    
    
    
        <script>
            let vm=new Vue({
                el:'#app',
                data:{
                    str:'我爱你'
                    
                },
                //计算属性
                //记得返回值
                computed: {
                    computed_str:function(value){
                        return  '计算后的结果:'+this.str.split('').reverse().join('');
    
                    }
                    
                },
    
            
            })
        
        </script>
    
    
    </body>
    </html>
    View Code

    四.Vue的生命周期

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="js/vue.js"></script>
    </head>
    <body>
        <div id="app">
            <p>{{num}}</p>
        </div>
        <script>
            // 侦听属性
            // 这里的属性是指代data中的数据
            let vm = new Vue({
                el:"#app",
                data:{
                    num:10
                },
                //  vm对象初始化之前,此时el和data还没有出现
                beforeCreate: function(){
                    console.log("beforeCreate在vm对象初始化之前,此时el和data还没有出现");
                    console.log(this.$el); // this..$el 查看上面vue对象操作的标签控制器
                    console.log(this.$data); // this.$data 查看上面vue对象保存的data,访问bum这些数据时没有的
                },
                // vm对象初始化之后,
                created: function(){
                    console.log('created在vm对象初始化之后执行了,此时$el没有,但是已经有data数据了');
                    console.log(this.$el);
                    console.log(this.$data);
                    console.log( this.num );
                    // 开发项目时,在这个函数中,编写向后台请求数据的代码,这些代码不涉及到视图html标签的操作
                    // ajax
                },
                // 把data数据挂载到html视图之前
                beforeMount: function(){
                    console.log('beforeMount执行了,此时vue并没有把data数据挂载到html视图中,所以$el还是源码中的vue指令');
                    console.log(this.$el.innerHTML);
                    console.log(this.$data); // $data早已经有了
                },
                // 把data数据挂载到html视图之后
                mounted: function(){
                    console.log('mounted执行了,此时vue已经把data数据挂载到html视图中了,所以$el就是挂载后的数据');
                    console.log(this.$el.innerHTML);
                    // 这个位置用于编写初始化中操作html内容的代码
                }
            })
        </script>
    </body>
    </html>
    View Code

     总结:

    在vue使用的过程中,如果要初始化操作,把初始化操作的代码放在 mounted 中执行。
    mounted阶段就是在vm对象已经把data数据实现到页面以后。一般页面初始化使用。例如,用户访问页面加载成功以后,就要执行的ajax请求。
    
    另一个就是created,这个阶段就是在 vue对象创建以后,把ajax请求后端数据的代码放进 created

    五.ajax请求  

      vue.js默认没有提供ajax功能的。

      所以使用vue的时候,一般都会使用axios的插件来实现ajax与后端服务器的数据交互。

      注意,axios本质上就是javascript的ajax封装,所以会被同源策略限制。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script src='js/vue.js'>  </script>
        <!-- 需要写在vue后面,对vue有依赖 -->
        <script src='js/axios.js'> </script>
    
       
    </head>
    <body>
        <div id="app">
            请输入你要查询的城市: <input type="text" v-model='city'>
            <button @click='getweather'>点击获取天气</button>
            <h1>{{ganmao}}</h1>
    
    
        </div>
        
        <script>
            let vm=new Vue({
                el:'#app',
                data:{
                    city:'',
                    ganmao:'',
                    
                },
                methods:{
                    //在这里编辑一个ajax
                    //axios是一个对象
                    //axios.get(url地址).then(function{}) 发送get的请求数据,then是请求成功后的处理函数
                    //axios.post 发送post请求
                    //进入ajax前要保存Vue对象到一个变量里面,方便在ajax里面调用this
                    getweather:function(){
    
                        _this=this                              //会在请求成功之后,自动执行,response里面包含后端返回的数据
                        axios.get("http://wthrcdn.etouch.cn/weather_mini?city="+this.city).then(function(response){
                            console.log(response);
                            console.log('ajax内部的函数',this);
                            _this.ganmao=response.data.data.ganmao
                        }).catch(function(error){//捕获错误,会自动捕获ajax请求失败的错误信息
                            console.log(error)
                        })
                    }
                }
            })
        
        </script>
    
    
    </body>
    </html>
    View Code

       例子二:

    // 发送get请求
        // 参数1: 必填,字符串,请求的数据接口的url地址
        // 参数2:必填,json对象,要提供给数据接口的参数
        // 参数3:可选,json对象,请求头信息
        axios.get('/user',{
                ID:'12345',
          })
        .then(function (response) { // 请求成功以后的回调函数
                console.log("请求成功");
                console.log(response);
        })
        .catch(function (error) {   // 请求失败以后的回调函数
                console.log("请求失败");
                console.log(error);
        });
    
    // 发送post请求,参数和使用和axios.get()一样。
        axios.post('/user',{
            params:{
                firstName: 'Fred',
                lastName: 'Flintstone'
            }
        })
        .then(function (response) {
          console.log(response);
        })
        .catch(function (error) {
          console.log(error);
        });
    
    // b'firstName=Fred&lastName=Flintstone'
    View Code

    六.同源策略问题

      1.同源问题的拦截

      在浏览器页面运行过程中,
      服务器和浏览器运行程序的地址要保持在同一个源下.

      

      同源策略,是浏览器为了保护用户信息安全的一种安全机制。所谓的同源就是指代通信的两个地址(例如服务端接口地址与浏览器客户端页面地址)之间比较,是否协议、域名(IP)和端口相同。不同源的客户端脚本[javascript]在没有明确授权的情况下,没有权限读写对方信息。

      ajax本质上还是javascript,是运行在浏览器中的脚本语言,所以会被受到浏览器的同源策略所限制。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script src='js/vue.js'>  </script>
        <script src='js/axios.js'></script>
        
    </head>
    <body>
        <div id="app">
            请输入你要查询歌曲: <input type="text" v-model='music'>
            <button @click='getinfo'>点击获取歌曲详情</button>
            <p>{{detail}}</p>
    
    
        </div>
        
    
        <script>
              // 同源策略:
            // 在浏览器页面运行过程中,
            // 服务器和浏览器运行程序的地址要保持在同一个源下.
            // 源:必须同样的域名, 同样的端口, 同样的协议
            // ajax运行的前端地址: http://www.baidu.com/get_user
            // 服务器:     https://blog.baidu.com/get_user                     不同源,[端口一样,域名不同,协议不同,]
            // 服务器:     http://blog.sina.com/get_user                       不同源,[端口一样,域名不同,协议相同,]
            // 服务器:     http://www.baidu.com/v1/get_user                        同源,[端口一样,域名一样,协议相同,]
            let vm=new Vue({
                el:'#app',
                data:{
                    music:'',
                    detail:'',
                },
                methods:{
                    getinfo:function(){
                        _this=this
                        axios.get("http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.search.catalogSug&query="+this.music)
                        .then(function(response){
                            console.log(response);
                            console.log('ajax内部的函数',this)
    
                            _this.detail=response.data.data.ganmao
                        }).catch(function(error){console.log(error)})
    
                    }
                }
            })
        
        </script>
    
    
    </body>
    </html>
    View Code

       案例二:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="js/jquery-1.12.4.js"></script>
        <script>
        $(function(){
            $("#btn").on("click",function(){
                $.ajax({
                    url: 'http://weatherapi.market.xiaomi.com/wtr-v2/weather',
                    type: 'get',
                    dataType: 'json',
                    data:{
                        "cityId":101010100
                    }
                })
                .done(function(resp) {     // 请求成功以后的操作
                    console.log(resp);
                })
                .fail(function(error) {    // 请求失败以后的操作
                    console.log(error);
                });
            });
        })
        </script>
    </head>
    <body>
    <button id="btn">点击获取数据</button>
    </body>
    </html>
    View Code

      2.ajax跨域(跨源)方案之CORS 

      CORS是一个W3C标准,全称是"跨域资源共享",它允许浏览器向跨源的后端服务器发出ajax请求,从而克服了AJAX只能同源使用的限制。

      实现CORS主要依靠后端服务器中响应数据中设置响应头信息返回的。

      response = new Response()

      response .set_header("")

    // 在响应行信息里面设置以下内容:
    Access-Control-Allow-Origin: ajax所在的域名地址
    
    Access-Control-Allow-Origin: www.oldboy.cn  # 表示只允许www.oldboy.cn域名的客户端的ajax跨域访问
    
    // * 表示任意源,表示允许任意源下的客户端的ajax都可以访问当前服务端信息
    Access-Control-Allow-Origin: *

    总结:

    0. 同源策略:浏览器的一种保护用户数据的一种安全机制。
       浏览器会限制脚本语法不能跨源访问其他源的数据地址。
       同源:判断两个通信的地址之间,是否协议,域名[IP],端口一致。
       
       ajax:  http://127.0.0.1/index.html
       api数据接口:  http://localhost/index
       
       这两个是同源么?不是同源的。
       
    1. ajax默认情况下会受到同源策略的影响,一旦受到影响会报错误如下:
         No 'Access-Control-Allow-Origin' header is present on the requested resource
    
    2. 解决ajax只能同源访问数据接口的方式:
       1. 在服务端的响应行中设置:
          Access-Control-Allow-Origin: 允许访问的域名地址

    七.json数据

       1.介绍

    json是 JavaScript Object Notation 的首字母缩写,单词的意思是javascript对象表示法,这里说的json指的是类似于javascript对象的一种数据格式。
    
    json的作用:在不同的系统平台,或不同编程语言之间传递数据。

      2.语法

    json数据对象类似于JavaScript中的对象,但是它的键对应的值里面是没有函数方法的,值可以是普通变量,不支持undefined,值还可以是数组或者json对象。

      3.总结

    1. json文件的后缀是json
    2. json文件一般保存一个单一的json数据对象
    3. json数据的属性不能是方法或者undefined,属性值只能:数值、字符串、对象和数组
    4. json数据只使用双引号、每一个属性成员之间使用逗号隔开,并且最后一个成员没有逗号。
       {
          "name":"小明",
          "age":200,
          "fav":["code","eat","swim","read"],
          "son":{
            "name":"小小明",
            "age":100
          }
        }

      4,方法

    avascript提供了一个JSON对象来操作json数据的数据转换.

      

    stringifyjson对象字符串json对象转成字符串
    方法 参数 返回值 描述
    parse 字符串 json对象 字符串格式的json数据转成json对象
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <script>
        var json_obj = {
          "name":"小明",
          "age":200,
          "fav":["code","eat","swim","read"],
          "son":{
            "name":"小小明",
            "age":100
          }
        };
            // json对象转换成字符串格式的json数据
        var data_str = JSON.stringify(json_obj);
        console.log( data_str );
            // 字符串格式的json数据转换成json对象
        var data_json = JSON.parse(data_str);
        console.log( data_json );
        </script>
    </head>
    <body>
    
    </body>
    </html>
  • 相关阅读:
    Hadoop环境搭建2_hadoop安装和运行环境
    Hadoop环境搭建1_JDK+SSH
    Linux5_环境变量
    Linux4_文件操作
    Linux3_文件系统
    Linux2_小技巧
    Linux1_Ubuntu的安装
    PhoneGap移动开发框架
    iOS 使用GitHub托管代码(github desktop使用)
    MRC和ARC混编
  • 原文地址:https://www.cnblogs.com/tjp40922/p/10504511.html
Copyright © 2011-2022 走看看