zoukankan      html  css  js  c++  java
  • 总结2:图片分享系统

    这里是我在与同学合作一个图片分享系统时遇到的问题的解决方法,因为是第一次学习和使用vue.js,所以问题很基础也很杂,主要是用于给自己留下一个记录。

    =======================================================
    问题1:

    实现轮播时,如果想实现点击按跳到特定页后继续自动显示下一页的功能,如果这个自动显示下一页的功能的实现为直接调用setTimeout,如:

    start(){
    	setTimeout(this.sliderNext(),2000);
    }
    

    会导致点跳页按钮后,换自动换下一张的速度明显加快。

    解决方法:

    使用clearTimeout清除之前的定时器,如:

    var timer;
    start(){
    	clearTimeout(timer);
    	timer = setTimeout(this.sliderNext(),2000);
    }
    

    setTimeout在使用的时候毕竟会是一个异步操作,需要注意执行代码对其他地方代码的影响,在特定时候执行clearTimeout会是一个好习惯。

    =========================================================

    问题2:

    css3实现子元素平分容器

    解决方法:

    #outer{
    	display:box;
    	display:-webkit-box;
    	display:-moz-box;
    }
    
    #inner1{
    	-webkit-box-flex:1;
    	-moz-box-flex:1;
    	box-flex:1;
    }
    
    #inner2{
    	-webkit-box-flex:1;
    	-moz-box-flex:1;
    	box-flex:1;
    }
    
    #inner3{
    	-webkit-box-flex:1;
    	-moz-box-flex:1;
    	box-flex:1;
    }
    

    注意:#inner们不要设置float:left的样式,否则它们会显示不出来。

    =========================================================

    问题3:

    点击空白处时,关闭弹窗

    解决方法:

    mounted() {
       document.addEventListener('click', (e) => {
           if (!this.$el.contains(e.target)) this.show = false
       })
    }
    

    =========================================================

    vue2.0相对与之前版本修改了新的语法,
    丢弃$index和$key

    新数组语法

    <tr v-for="list in lists">
    {{list}}
    </tr>
    或者
    <tr v-for="(list,index)in lists">
    az</tr>
    

    =========================================================

    vue v-for 设置开始位置和结束位置

    <div class="c-picGallery__other" v-for="(item,index) in imageList" v-if="index > 0">
    	<img :src="$img(item)">
    </div>
    

    =========================================================

    需要注意的是,Vue之所以能够监听Model状态的变化,是因为JavaScript语言本身提供了Proxy或者Object.observe()机制来监听对象状态的变化。但是,对于数组元素的赋值,却没有办法直接监听

    因此,如果我们直接对数组元素赋值:

    vm.todos[0] = {
        name: 'New name',
        description: 'New description'
    };
    

    会导致Vue无法更新View。
    正确的方法是不要对数组元素赋值,而是更新:

    vm.todos[0].name = 'New name';
    vm.todos[0].description = 'New description';
    

    或者,通过splice()方法,删除某个元素后,再添加一个元素,达到“赋值”的效果:

    var index = 0;
    var newElement = {...};
    vm.todos.splice(index, 1, newElement);
    

    Vue可以监听数组的splice、push、unshift等方法调用,所以,上述代码可以正确更新View。

    =========================================================

    vue过渡时对应钩子的响应顺序

    当 show 属性改变时,Vue.js 将相应地插入或删除

    元素,按照如下规则改变过渡的 CSS 类名:

    如果 show 变为 false,Vue.js 将:

    调用 beforeLeave 钩子;
    添加 v-leave 类名到元素上以触发过渡;
    调用 leave 钩子;
    等待过渡结束(监听 transitionend 事件);
    从 DOM 中删除元素并删除 v-leave 类名;
    调用 afterLeave 钩子。
    如果 show 变为 true,Vue.js 将:

    调用 beforeEnter 钩子;
    添加 v-enter 类名到元素上;
    把它插入 DOM;
    调用 enter 钩子;
    强制一次 CSS 布局,让 v-enter 确实生效。然后删除 v-enter 类名,以触发过渡,回到元素的原始状态;
    等待过渡结束;
    调用 afterEnter 钩子。
    另外,如果在它的进入过渡还在进行中时删除元素,将调用 enterCancelled 钩子,以清理变动或 enter 创建的计时器。反过来对于离开过渡亦如是。

    =========================================================

    问题:

    搜索框(在父组件)输入内容,子组件接受内容并根据内容对分享项进行操作(例如筛选等等)

    解决方法:

    在子组件使用$watch来监控父组件传过来的数据而改变子组件的显示内容

    父组件:

    <div class="content">
    	<categoriesList :searchString="searchString"></categoriesList>
    	<contentTab></contentTab>
    </div>
    
    data(){
    	return {
            searchString:'',
    	}
    },
    
    
    getSearchResult(){
    	this.searchText = this.searchText.trim();
    	if(this.searchText==="" || this.searchText=="搜索分享"){
    		alert("搜索空字段");
    		return;
    	}
    	
    	// alert("搜索  "+this.searchText);
    	this.searchString = this.searchText;
    //传this.searchText,获取分享
    
    },
    

    子组件:

    mounted(){	
    	this.$watch('searchString',function(){
        	this.searchShare();	//操作
        });
    },
    
    
    props:{
    	searchString:{
    		type:String,
    		default:'',
    	}
    	
    },
    

    =========================================================

    点击分类按钮显示对应分类内容

    在实现点击分类按钮显示响应分类内容的功能时,我一开始是使用先分别获取各分类内容,然后使用v-if对每一个的显示和隐藏进行控制,所以我一开始是对每个分类的内容都定义一个div(。。。。真是蠢死了orz)

    其实一开始获取到所有分享后把这些分享放到一个数组里面,那么现在获取到某个分类下的分享后,用同样的方法改变这个数组就行了,这样vue会检查到这个数组的变化,然后重新渲染页面的内容

    =========================================================

  • 相关阅读:
    安装thrift时,注意openssl参数
    Linux下boost编译安装
    super-smack
    算术运算指令
    C/C++中有关字长与平台无关的整数类型
    URLTester2.3.2
    第20课 链接过程简介
    第19课 编译过程简介
    第18课 三目运算符和逗号表达式
    第17课 ++和--操作符分析
  • 原文地址:https://www.cnblogs.com/limengyi/p/6171972.html
Copyright © 2011-2022 走看看