2016-11-27 195 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答案,因为他的解决方案涵盖了如果没有影响事物的错误,如何设计按钮的样式。 –