• 仿饿了么收藏功能


    商家收藏这一功能为例: 
    1. 首先App.vue中根据url 设置好 商家的id

    <script>
    import {urlParse} from './common/js/util.js'
    import Header from './components/header/Header.vue'
    
    const err_OK = 0;
    
    export default{
      data(){
        return { /* 商家默认有id */
          seller:{
            id:(()=>{
             /* 从地址栏中的url中通过urlParam函数解析,得到id */
              let queryParam = urlParse();
              console.log(queryParam);
              return queryParam.id;
            })()
          }
        }
      },
      created(){
        this.$http.get('./api/seller?id='+this.seller.id).then((res)=>{
          var resData  = res.data;
          if(resData.errno  === err_OK){
            /* this.seller =  resData.data; 会覆盖掉id */
            /* 防止把id覆盖掉,使用es6的一个语法:扩展了对象的属性,在原来的基础上添加response.data的值,不会覆盖掉原来的id属性 */
            this.seller = Object.assign({},this.seller,resData.data);
            console.log(this.seller.id);
          }
        },(res)=>{
          alert(res.status);
        });
      },
      components: {
        'v-header': Header
      }
    }
    </script>
    

    2、seller.vue: 设置和读取localstorage

    <div class="favorite" @click="toggleFavorite($event)">
        <span class="icon icon-favorite" :class="{'active':favorite}"></span>
        <div class="text">{{favoriteText}}</div>
    </div>
    
    ----
    import {saveToLocal,loadFromLocal} from '../../common/js/store.js'
    export default{
        props:{
            seller: {
                type: Object
            }
        },
        data(){
            return{
                favorite: (()=>{
                    return loadFromLocal(this.seller.id,'favorite',false);
                })()
            }
        },
        computed:{
            favoriteText(){
                return this.favorite? '已收藏': '收藏';
            }
        },
    
        methods:{
            toggleFavorite(event){
                if(!event._constructed){
                    return;
                }
                this.favorite = !this.favorite;
                saveToLocal(this.seller.id, 'favorite', this.favorite);
            }
        }
    }
    

    3、保存的读取localStorage的接口—-store.js:

    /**
     * [保存数据到localstorage]
     * @param  {[Number]} id  [商家id]
     * @param  {[type]} key [属性值]
     * @param  {[type]} value [value值]
     * @return {[type]}       [description]
     */
    export function saveToLocal(id, key, value) {
        let seller = window.localStorage.__seller__;
        if (!seller) {
            seller = {};
            seller[id] = {};
    
        } else {
            seller = JSON.parse(seller);
            if (!seller[id]) {
                seller[id] = {};
            }
        }
        seller[id][key] = value;
        window.localStorage.__seller__ = JSON.stringify(seller);
    };
    /**
     * [从localstorage读取数据]
     * @param  {[Number]} id  [商家id]
     * @param  {[type]} key [属性值]
     * @param  {[type]} def [属性值的默认取值,当没有保存key时,返回默认值]
     * @return {[type]}     [属性值对应的value值]
     */
    export function loadFromLocal(id, key, def) {
        let seller = window.localStorage.__seller__;
        if(!seller){
            return def;
        }
    
        seller = JSON.parse(seller);
        if(!seller[id]){
            return def;
        }
    
        let ret = seller[id][key];
        return ret || def;
    }
    

    4.util.js:

    /**
     * [解析url参数]
     * @example ?id=12345&a=1
     * @return Object {id:12345,a:1}
     */
    export function urlParse(){
        let url = decodeURIComponent(window.location.search);
        let obj = {};
        let reg = /[?&][^?&]+=[^?&]+/g;
        //['?id=12345','a=1']
        let arr = url.match(reg);
        if(arr){
            arr.forEach((item)=>{
                let  tempArr =  item.substring(1).split('=');
                let key = decodeURIComponent(tempArr[0]);
                let value = decodeURIComponent(tempArr[1]);
                obj[key] = value;
            })
        }
        return obj;
    }  

      原文链接:http://blog.csdn.net/u013217071/article/details/73379128

  • 相关阅读:
    Cygwin下载Make
    OFDM技术的基本原理
    HNode B全面提升运营商竞争力
    定制JeOS
    什么是以太网
    Outlook Favorite Folder missing
    OFDM信号发送接收原理解析
    tgtsvr error: Cannot contact Wind Registry on host
    Windows Live Messenger去除广告 zz
    OO Unit4总结 & 结课总结
  • 原文地址:https://www.cnblogs.com/karila/p/7803763.html
Copyright © 2020-2023  润新知