2016-11-27 150 views
2

我正在玩VueVue Material組件,特別是Table componentVue材質 - 造型表格按鈕?

我想要做的是更改名爲Within cards with Pagination and Inline Edit的表格示例中的搜索圖標/按鈕的顏色,但似乎我必須丟失一些東西,因爲我無法從缺省顏色中更改它灰色,我正在努力理解爲什麼是這樣。

我有一個基本頁面,其中包括Vue以及Vue材質和它所需的Javascript和CSS文件所需的字體和圖標。

的index.html

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <title>Testing</title> 
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700,400italic"> 
    <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons"> 
    <link rel="stylesheet" href="https://cdn.rawgit.com/marcosmoura/vue-material/master/dist/vue-material.css" /> 
</head> 
<body> 
    <div id="app" v-md-theme="'default'"> 
    <md-table-card> 
     <md-toolbar> 
     <h1 class="md-title">Nutrition</h1> 
     <md-button class="md-icon-button"> 
      <md-icon>filter_list</md-icon> 
     </md-button> 

     <md-button class="md-icon-button" @click="toggleSearch()"> 
      <md-icon v-if="searchEnabled" class="md-accent">search</md-icon> 
      <md-icon v-else>search</md-icon> 
     </md-button> 
     </md-toolbar> 

     <md-table md-sort="dessert" md-sort-type="desc" @select="onSelect" @sort="onSort"> 
     <md-table-header> 
      <md-table-row> 
      <md-table-head md-sort-by="dessert">Dessert (100g serving)</md-table-head> 
      <md-table-head md-sort-by="calories" md-numeric md-tooltip="The total amount of food energy and the given serving size">Calories (g)</md-table-head> 
      <md-table-head md-sort-by="fat" md-numeric>Fat (g)</md-table-head> 
      <md-table-head md-sort-by="carbs" md-numeric>Carbs (g)</md-table-head> 
      <md-table-head md-sort-by="protein" md-numeric>Protein (g)</md-table-head> 
      <md-table-head> 
       <md-icon>message</md-icon> 
       <span>Comments</span> 
      </md-table-head> 
      </md-table-row> 
     </md-table-header> 

     <md-table-body> 
      <md-table-row v-for="(row, rowIndex) in nutrition" :key="rowIndex" :md-item="row" md-auto-select md-selection> 
      <md-table-cell v-for="(column, columnIndex) in row" :key="columnIndex" :md-numeric="columnIndex !== 'dessert' && columnIndex !== 'comment'" v-if="columnIndex !== 'type'"> 
       <md-table-edit 
       :md-name="'comment' + columnIndex" 
       :md-id="'comment' + columnIndex" 
       md-placeholder="Add a comment" 
       md-maxlength="120" 
       v-model="nutrition[rowIndex].comment" 
       v-if="columnIndex === 'comment'"></md-table-edit> 

       <span v-if="columnIndex !== 'comment'"></span> 
      </md-table-cell> 
      </md-table-row> 
     </md-table-body> 
     </md-table> 

     <md-table-pagination 
     md-size="10" 
     md-total="5" 
     md-page="1" 
     md-label="Rows" 
     md-separator="of" 
     :md-page-options="[5, 10, 25, 50]" 
     @pagination="onPagination"></md-table-pagination> 
    </md-table-card> 
    </div> 

    <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.1.3/vue.js" type="text/javascript"></script> 
    <script src="https://cdn.rawgit.com/marcosmoura/vue-material/master/dist/vue-material.js" type="text/javascript"></script> 
    <script src="app.js" type="text/javascript"></script> 
</body> 
</html> 

app.js

// Enable Vue Material 
Vue.use(VueMaterial); 

// Apply theme 
Vue.material.theme.register('default', { 
    primary: 'blue', 
    accent: 'light-blue' 
}); 

// Initialise Vue 
new Vue({ 
    el: '#app', 
    data: { 
    nutrition: [{ 
     dessert: 'Frozen yogurt', 
     type: 'ice_cream', 
     calories: '159', 
     fat: '6.0', 
     carbs: '24', 
     protein: '4.0', 
     comment: 'Icy' 
    }], 
    selectedData: [], 
    sort: {}, 
    page: {}, 
    searchEnabled: false 
    }, 
    methods: { 
    onSelect: function (data) { 
     this.selectedData = data; 
     this.$forceUpdate(); 
    }, 
    onSort: function (sort) { 
     this.sort = sort; 
    }, 
    onPagination: function (page) { 
     this.page = page; 
    }, 
    toggleSearch: function() { 
     console.log(this.searchEnabled); 
     if (this.searchEnabled) { 
     this.searchEnabled = false; 
     } else { 
     this.searchEnabled = true; 
     } 
    } 
    } 
}); 

當網頁加載完畢後我與表中的應用與例子。當我點擊搜索圖標時,我可以看到來自方法toggleSearch()的控制檯日誌,並且它按照預期在布爾值之間變化,但搜索圖標的顏色不變。

縱觀組件的HTML的搜索按鈕:

<md-button class="md-icon-button" @click="toggleSearch()"> 
    <md-icon v-if="searchEnabled" class="md-accent">search</md-icon> 
    <md-icon v-else>search</md-icon> 
</md-button> 

我用的if/else條件重音類,我以爲會是取決於boolen值searchEnabled默認的灰色什麼,之間切換這適用於獨立按鈕,但不在桌子內部。

任何人都可以提出一個理由,爲什麼會發生這種情況,或者我應該如何處理表格中該按鈕的造型。任何意見或反饋將不勝感激,非常感謝!

(積分,如果你可以建議,如果有Vue的方式有條件地申請一個類,即而不是使用v-if,v-else和複製圖標元素,有沒有另一種方法來申請類基於布爾值和只使用一個圖標元素?)

回答

3

是的,你可以使用VueJs做動態樣式,Here是相同的文檔。可以傳遞一個目的是v-bind:class動態切換類:

<md-button class="md-icon-button" @click="toggleSearch()"> 
    <md-icon v-bind:class="{ 'md-accent': searchEnabled }">search</md-icon> 
</md-button> 

上述語法指md-accent類的存在將通過數據屬性searchEnabled的感實性來確定。

+0

加分,工作良好,但仍然沒有Vue的材質表搜索按鈕中工作的錯誤。任何想法爲什麼或看起來像是一個錯誤? –

+0

打算做一個小小的編輯,但不能,你需要將''md-accent''引號改爲單引號''md-accent''。 –

+0

@CraigvanTonder完成,謝謝指出。這也是我在回答中的搜索按鈕,它不起作用或者不同? – Saurabh

1

這是固定在V0.4.0實現:-)謝謝

+0

給予@saurabh答案,因爲他的解決方案涵蓋了如果沒有影響事物的錯誤,如何設計按鈕的樣式。 –