>

이메일을 관리하기 위해 v-data-table을 사용합니다. 사용자가 행을 클릭하면 이메일 세부 정보가 포함 된 팝업이 나타납니다.

내가 갖고 싶은 것 :
이 행을 클릭 한 후 '읽기'(CSS 굵게/굵지 않음)로 표시된 행을 갖고 싶습니다.

문제 :
나는 이미 몇 가지 예를 발견했다 : Vuetify-방법 v-data-table에서 클릭시 행을 강조 표시

이 예제 (및 내가 찾은 다른 모든 예제)는 v-data-table에 확장 코드를 사용합니다 :

   <v-data-table
      :headers="headers"
      :items="desserts"
      class="elevation-1"
    >
      <template v-slot:items="props">
        <tr @click="activerow(props.item)" :class="{'primary': props.item.id===selectedId}">
        <td>{{ props.item.name }}</td>
        <td class="text-xs-right">{{ props.item.calories }}</td>
        <td class="text-xs-right">{{ props.item.fat }}</td>
        <td class="text-xs-right">{{ props.item.carbs }}</td>
        <td class="text-xs-right">{{ props.item.protein }}</td>
        <td class="text-xs-right">{{ props.item.iron }}</td>
        </tr>
      </template>
    </v-data-table>

확장 코드는

     <template v-slot:items="props">
        <tr @click="activerow(props.item)" :class="{'primary': props.item.id===selectedId}">
        <td>{{ props.item.name }}</td>
        <td class="text-xs-right">{{ props.item.calories }}</td>
        <td class="text-xs-right">{{ props.item.fat }}</td>
        <td class="text-xs-right">{{ props.item.carbs }}</td>
        <td class="text-xs-right">{{ props.item.protein }}</td>
        <td class="text-xs-right">{{ props.item.iron }}</td>
        </tr>
      </template>

항목을 표시 할 때이 코드 만 사용합니다.

   <v-data-table
      :headers="headers"
      :items="desserts"
      class="elevation-1"
    >
    </v-data-table>

확장 버전이 아닌 다른 예제 나 솔루션이 있습니까? vuetify 페이지에 그러한 공식적인 예가 없기 때문에 묻습니다.


  • 답변 # 1

    selectRow 메소드를 추가했습니다  아이템을 받고 isSelected 를 추가합니다.  그것에 재산. 그런 다음 template 에서  나는 수업 .primary 를 할당  품목에 재산 isSelected 가있는 경우 .

    알림:이 방법은 isSelected 도 제거합니다  이전에 선택한 항목의 속성 그래서 오직 하나의 <tr>  동시에 강조 될 수 있습니다.

    new Vue({
      el: "#app",
      methods: {
        selectRow(item) {
          // remove isSelected from already selected item
          // const prevItem = this.desserts.find(dessert => dessert.isSelected);
          // if (prevItem) this.$delete(prevItem, 'isSelected');
          this.$set(item, "isSelected", true)
        }
      },
      data() {
        return {
          headers: [{
              text: 'Dessert (100g serving)',
              align: 'left',
              sortable: false,
              value: 'name'
            },
            {
              text: 'Calories',
              value: 'calories'
            },
            {
              text: 'Fat (g)',
              value: 'fat'
            },
            {
              text: 'Carbs (g)',
              value: 'carbs'
            },
            {
              text: 'Protein (g)',
              value: 'protein'
            },
            {
              text: 'Iron (%)',
              value: 'iron'
            }
          ],
          desserts: [{
              name: 'Frozen Yogurt',
              calories: 159,
              fat: 6.0,
              carbs: 24,
              protein: 4.0,
              iron: '1%'
            },
            {
              name: 'Ice cream sandwich',
              calories: 237,
              fat: 9.0,
              carbs: 37,
              protein: 4.3,
              iron: '1%'
            },
            {
              name: 'Eclair',
              calories: 262,
              fat: 16.0,
              carbs: 23,
              protein: 6.0,
              iron: '7%'
            },
            {
              name: 'Cupcake',
              calories: 305,
              fat: 3.7,
              carbs: 67,
              protein: 4.3,
              iron: '8%'
            },
            {
              name: 'Gingerbread',
              calories: 356,
              fat: 16.0,
              carbs: 49,
              protein: 3.9,
              iron: '16%'
            },
            {
              name: 'Jelly bean',
              calories: 375,
              fat: 0.0,
              carbs: 94,
              protein: 0.0,
              iron: '0%'
            },
            {
              name: 'Lollipop',
              calories: 392,
              fat: 0.2,
              carbs: 98,
              protein: 0,
              iron: '2%'
            },
            {
              name: 'Honeycomb',
              calories: 408,
              fat: 3.2,
              carbs: 87,
              protein: 6.5,
              iron: '45%'
            },
            {
              name: 'Donut',
              calories: 452,
              fat: 25.0,
              carbs: 51,
              protein: 4.9,
              iron: '22%'
            },
            {
              name: 'KitKat',
              calories: 518,
              fat: 26.0,
              carbs: 65,
              protein: 7,
              iron: '6%'
            }
          ]
        }
      },
    })
    
    
    .primary,
    .primary:hover {
      /** avoid using !important, added just for example**/
      background-color: red !important;
    }
    .as-console-wrapper {
      display: none !important;
    }
    
    
    <link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons" rel="stylesheet">
    <link href="https://cdn.jsdelivr.net/npm/vuetify@1.x/dist/vuetify.min.css" rel="stylesheet">
    <div id="app">
      <v-data-table :headers="headers" :items="desserts" class="elevation-1">
        <template v-slot:items="props">
            <tr @click="selectRow(props.item)" :class="{ 'primary': props.item.isSelected }">
            <td>{{ props.item.name }}</td>
            <td>{{ props.item.calories }}</td>
            <td>{{ props.item.fat }}</td>
            <td>{{ props.item.carbs }}</td>
            <td>{{ props.item.protein }}</td>
            <td>{{ props.item.iron }}</td>
            </tr>
          </template>
      </v-data-table>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vuetify@1.x/dist/vuetify.js"></script>
    
    

  • 이전 C #에서 문자열을 열거 형으로 변환
  • 다음 c - 연결된 목록을 쌍으로 바꾸는 방법