Front-End

[Vue.js 기초] 반복문 v-for 예제로 마스터하기(key, index 등)

Vue.js에서 사용하는 반복문에 대해 알아봅니다.  배열이든, 객체이든 반복해서 출력해야 할 경우 v-for 디렉티브를 사용하게됩니다. 샘플코드를 보고 따라하는 방법이 가장 빠르게 배우는 지름길입니다. 눈으로 본 자료는 기억에 오래가지 않아요. 

 

v-for 기본 예제& index 사용 예제

[HTML]

<div id="app">
  <h2>Todos: v-for 기본 예제</h2>
  <ul>
    <li v-for="item in city">도시: {{item}}</li>    
  </ul>
  <br/>
  <h2>Todos: v-for index 사용 예제</h2>
  <ul>
    <li v-for="(item, i) in city">Seq: {{i}}  ,  도시: {{item}}</li>    
  </ul>  
</div>

[JS]

new Vue({
  el: "#app",
  data: {
    city: ['서울','대전','대구','부산'],    
  },
  methods: {
  }
})

[CSS]

body {
  background: #20262E;
  padding: 20px;
  font-family: Helvetica;
}

#app {
  background: #fff;
  border-radius: 4px;
  padding: 20px;
  transition: all 0.2s;
}

div {
  margin: 8px 0;
}

h2 {
  font-weight: bold;
  margin-bottom: 15px;
}

[실행결과]


 

v-for 객체 값을 갖는 배열 데이터 출력하기

vue.js 관련 책이나 공식 문서를 보면 key값을 선언해줄 것을 권장하고 있어요. 별도의 키 값이 없다면, index 값을 키값으로 활용해도 됩니다. 데이터베이스에서 데이터를 가져오는 경우라면 key 값이 있을 확률이 높아요. 아래쪽에 select 박스 예제를 보시면 이해가 오실거에요.

[HTML]

<div id="app">
  <h2>Todos: v-for 객체 값을 갖는 배열 데이터 출력하기</h2>
  <ul>
    <li v-for="item in cityList">시도:{{item.sido}}, 도시: {{item.city}}</li>    
  </ul>
  <br/>
  <h2>Todos: v-for 키값이 없다면 index를 키값으로 사용</h2>
  <ul>
    <li v-for="(item, i) in cityList">Seq: {{i}}  ,  도시: {{item.city}}</li>    
  </ul>  
</div>

[JS]

new Vue({
  el: "#app",
  data: {
    cityList: [{sido:"전북", city:"전주"},
    {sido:"전북",city:"익산"},
    {sido:"전북",city:"정읍"},
    {sido:"경기도",city:"일산"}],
  },
  methods: {
  }
})

[실행결과]


 

v-for를 사용하여 콤보박스(select태그)의 option 값 설정하기

[HTML]

<div id="app">
  <h2>Todos: v-for 콤보박스 option 출력</h2>
    <select v-model="selectModel">
      <option v-for="(item, idx) in cityList" :value="item.val" :key ="item.idx">
        {{item.city}}
      </option>
    </select>
  <span>콤보박스 선택값은? {{selectModel}}</span>
</div>

[JS]

new Vue({
  el: "#app",
  data: {
  	selectModel: '',
    cityList: [{city:"전북", val:"063"},
    {city:"경기",val:"032"},
    {city:"강원도",val:"033"},
    {city:"서울",val:"02"}],
  },
  methods: {

  }
})

[실행결과]


 

콤보박스 disabled 처리

콤보박스(select태그)의 값을 선택하면 그 다음엔 그 값을 선택하지 못하도록 해보자

[HTML]

<div id="app">
  <h2>Todos: v-for 콤보박스 disabled 처리</h2>
    <select v-model="selectModel[0]">
    <option value="undefined" selected>-선택-</option>   
      <option v-for="(item, idx) in cityList" :value="item.val" :key ="idx" :disabled="isVisible(item.val)">
        {{item.city}}
      </option>
    </select>
  <span>콤보박스 선택값은? {{selectModel}}</span>
  <br/><br/><br/>
  <input type="button" value="값 지정하기" @click="fnSetData">
</div>

[JS]

new Vue({
  el: "#app",
  data: {
  	selectModel: [],
    cityList: [{city:"전북", val:"063"},
    {city:"경기",val:"032"},
    {city:"강원도",val:"033"},
    {city:"서울",val:"02"}],
  },
  methods: {
    isVisible: function(item){
    	let rtn = false
      for(let i in this.selectModel){
      	if(this.selectModel[i] === item){
        	rtn = true
        }
      }
      return rtn;
    },
    fnSetData: function(){
    	this.$set(this.selectModel,0, '033')
    }
  }
})

Vue.set(object, propertyName, value)메소드를 사용하여 객체의 값을 변경할 수 있습니다.

 

[실행결과]


콤보박스(select태그)의 값을 선택하면 그 다음엔 그 값을 선택하지 못하도록 해보자

[HTML]

<div id="app">
  <h2>Todos: v-for Object 객체 출력</h2>
  <div v-for="(value, name, idx) in cityList">{{idx}}. {{name}}</div>  
  <br/><br/>
  <div v-for="(text, name, idx) in cityList">{{idx}}. {{name}} => {{text}}</div> 
</div>

[JS]

new Vue({
  el: "#app",
  data: {
  	selectModel: [],
    cityList: {
    	sido:"전북",
      city:"군산",
      dong:"나운동"
    	},
  },
  methods: {

  }
})

[실행결과]


 

v-for range(범위) 예제 

[HTML]

<div id="app">
  <h2>Todos: v-for Range 예제</h2>
  <span v-for="n in 10" :key="n">{{ n }} </span>
</div>

 

[REFERENCE]

 

Leave a Reply

error: Content is protected !!