• vue sample


    <template>
      	<section>
        	<header class="top_tips">
        		<span class="num_tip" v-if="fatherComponent == 'home'">{{level}}</span>
        		<span class="num_tip" v-if="fatherComponent == 'item'">题目{{itemNum}}</span>
        	</header>
        	<div v-if="fatherComponent == 'home'" >
        		<div class="home_logo item_container_style"></div>
        		<router-link to="item" class="start button_style" ></router-link>
        	</div>
        	<div v-if="fatherComponent == 'item'" >
        		<div class="item_back item_container_style">
        			<div class="item_list_container" v-if="itemDetail.length > 0">
        				<header class="item_title">{{itemDetail[itemNum-1].topic_name}}</header>
        				<ul>
        					<li  v-for="(item, index) in itemDetail[itemNum-1].topic_answer" @click="choosed(index, item.topic_answer_id)" class="item_list">
        						<span class="option_style" v-bind:class="{'has_choosed':choosedNum==index}">{{chooseType(index)}}</span>
        						<span class="option_detail">{{item.answer_name}}</span>
        					</li>
        				</ul>
        			</div>
        		</div>
        		<span class="next_item button_style" @click="nextItem" v-if="itemNum < itemDetail.length"></span>
        		<span class="submit_item button_style" v-else @click="submitAnswer"></span>
        	</div>
      	</section>
    </template>
    
    <script>
    import { mapState, mapActions } from 'vuex'
    export default {
    	name: 'itemcontainer',
    	data() {
    		return {
    			itemId: null, //题目ID
    			choosedNum: null, //选中答案索引
    			choosedId:null //选中答案id
    		}
    	},
      	props:['fatherComponent'],
      	computed: mapState([
    	  	'itemNum', //第几题
      		'level', //第几周
      		'itemDetail', //题目详情
      		'timer', //计时器
    	]),
      	methods: {
      		...mapActions([
      			'addNum', 'initializeData',
      		]),
      		//点击下一题
      		nextItem(){
      			if (this.choosedNum !== null) {
    	  			this.choosedNum = null;
    	  			//保存答案, 题目索引加一,跳到下一题
    	  			this.addNum(this.choosedId)
      			}else{
      				alert('您还没有选择答案哦')
      			}
      		},
      		//索引0-3对应答案A-B
    	  	chooseType: type => {
    	  		switch(type){
    	  			case 0: return 'A';
    	  			case 1: return 'B';
    	  			case 2: return 'C';
    	  			case 3: return 'D';
    	  		}
    	  	},
    	  	//选中的答案信息
    	  	choosed(type,id){
    	  		this.choosedNum = type;
    	  		this.choosedId = id;
    	  	},
    	  	//到达最后一题,交卷,请空定时器,跳转分数页面
    	  	submitAnswer(){
    	  		if (this.choosedNum !== null) {
    	  			this.addNum(this.choosedId)
    	  			clearInterval(this.timer)
    	  			this.$router.push('score')
      			}else{
      				alert('您还没有选择答案哦')
      			}
    	  	},
    	},
    	created(){
    		//初始化信息
    		if(this.fatherComponent == 'home') {
    			this.initializeData();
    			document.body.style.backgroundImage = 'url(./static/img/1-1.jpg)';
    		}
    	}
    }
    </script>
    
    <style lang="less">
    	.top_tips{
    		position: absolute;
    		height: 7.35rem;
    		 3.25rem;
    		top: -1.3rem;
    		right: 1.6rem;
    		background: url(../images/WechatIMG2.png) no-repeat;
    		background-size: 100% 100%;
    		z-index: 10;
    		.num_tip{
    			position: absolute;
    			left: 0.48rem;
    			bottom: 1.1rem;
    			height: 0.7rem;
    			 2.5rem;
    			font-size: 0.6rem;
    			font-family: '黑体';
    			font-weight: 600;
    			color: #a57c50;
    			text-align: center;
    		}
    	}
    	.item_container_style{
    		height: 11.625rem;
    		 13.15rem;
    		background-repeat: no-repeat;
    		position: absolute;
    		top: 4.1rem;
    		left: 1rem;
    	}	
    	.home_logo{
    		background-image: url(../images/1-2.png);
    		background-size: 13.142rem 100%;
    		background-position: right center;
    	}
    	.item_back{
    		background-image: url(../images/2-1.png);
    		background-size: 100% 100%;
    	}
    	.button_style{
            display: block;
            height: 2.1rem;
             4.35rem;
            background-size: 100% 100%;
            position: absolute;
            top: 16.5rem;
            left: 50%;
            margin-left: -2.4rem;
            background-repeat: no-repeat;
    	}
    	.start{
            background-image: url(../images/1-4.png);
        }
        .next_item{
        	background-image: url(../images/2-2.png);
        }
        .submit_item{
        	background-image: url(../images/3-1.png);
        }
        .item_list_container{
        	position: absolute;
        	height: 7.0rem;
        	 8.0rem;
        	top: 2.4rem;
        	left: 3rem;
    		-webkit-font-smoothing: antialiased;
        }
    	.item_title{
    		font-size: 0.65rem;
    		color: #00e;
    		line-height: 0.7rem;
    	}
    	.item_list{
    		font-size: 0;
    		margin-top: 0.4rem;
    		 10rem;
    		span{
    			display: inline-block;
    			font-size: 0.6rem;
    			color: #00e;
    			vertical-align: middle;
    		}
    		.option_style{
    			height: 0.725rem;
    			 0.725rem;
    			border: 1px solid #fff;
    			border-radius: 50%;
    			line-height: 0.725rem;
    			text-align: center;
    			margin-right: 0.3rem;
    			font-size: 0.5rem;
    			font-family: 'Arial';
    		}
    		.has_choosed{
    			background-color: #ffd400;
    			color: #575757;
    			border-color: #ffd400;
    		}
    		.option_detail{
    			 7.5rem;
    			padding-top: 0.11rem;
    		}
    	}
    </style>
    

      

    单独来讲, Vue.js 被定义成一个用来开发 Web 界面的前端库,是个非常轻量级的工具。
    Vue.js 本身具有响应式编程和组件化的特点。


    Vue.js 的组件化理念和 ReactJS 异曲同工——“一切都是组件”,可以将任意封装好的代

    第 1章 Vue.js 简介
    码注册成标签,例如:Vue.component('example', Example),可以在模板中以 <example></
    example> 的形式调用。如果组件抽象得合理,这在很大程度上能减少重复开发,而且配合
    Vue.js 的周边工具 vue-loader,我们可以将一个组件的 CSS、HTML 和 js 都写在一个文件里,
    做到模块化的开发。
    除此之外,Vue.js 也可以和一些周边工具配合起来,例如 vue-router 和 vue-resource,
    支持了路由和异步请求,这样就满足了开发单页面应用的基本条件。


    作为新兴的前端框架,Vue.js 也抛弃了对 IE8 的支持,在移动端支持到 Android 4.2+ 和 iOS 7+。
    另外,在传统的前后端混合(通过后端模板引擎渲染)的
    项目中,Vue.js 也会受到一定的限制,Vue 实例只能和后端模板文件混合在一起,获取的数
    据也需要依赖于后端的渲染,这在处理一些 JSON 对象和数组的时候会有些麻烦。
    理想状态下,我们能直接在前后端分离的新项目中使用 Vue.js 最合适。这能最大程度上
    发挥 Vue.js 的优势和特性,熟悉后能极大的提升我们的开发效率以及代码的复用率。尤其是
    移动浏览器上,Vue.js 压缩后只有 18KB,而且没有其他的依赖。


    第一个特性是数据绑定
    第二个特性是组件化

    index.html: 整个项目的入口文件
    main.js: 整个项目的逻辑主文件
    Vue实例: vue的实例化对象
    包含: el / tem / com
    temp: 模板中可以写html / 调用其他组件
    <App/>:
    代表模板要执行的组件文件,跟App.vue中的name属性有关
    comp:
    组件组中要包含需要调用的组件名,例如上面模板调用了<App/>,那么组件组中就一定要包含App组件
    import:
    import用于导入需要依赖的文件,例如上方组件组中,
    想要引入App组件,那么首先要使用import引入这个组件文件
    import .. from ..: import 后面是自己起的名字,from后面是组件的名字
     
  • 相关阅读:
    记2008年7月25日午后 心情
    [多媒体]词典编码
    [多媒体]算术编码、游程编码
    [多媒体]数据压缩的类型
    [多媒体]理解PCM、DPCM、APCM、ADPCM
    C++异常处理
    [转]linux上SVN解决冲突的办法
    从海量数据查找有或者没有出现的数据
    八数码问题
    [转]linux中强大的screen命令
  • 原文地址:https://www.cnblogs.com/qianjinyan/p/10893500.html
Copyright © 2020-2023  润新知