在模式之间切换/访问数据结构的部分

时间:2014-02-08 07:31:25

标签: angularjs

鉴于以下数据:

    {
        id:         "",
        title:      "",
        // modes
        one: {
            stage:  1,
            order:  3,
            more:   "", 
        }       
        two: {
            stage:  14,
            order:  5,
            more:   "", 
        }       
        // ...
    },
    // ...

如何将以下两段代码组合成一个使用变量作为模式切换机制的代码?

// If selected mode was "one"
<li ng-repeat="item in items | orderBy: ['one.stage', 'one.order'] 
| filter: oneFilter" ng-class="{ topline: isNewOneStage( item )}">
    {{ item.title }}, 
    {{ item.one.stage }}
    // ...
</li>

// If selected mode was "two"
<li ng-repeat="item in items | orderBy: ['two.stage', 'two.order'] 
| filter: twoFilter" ng-class="{ topline: isNewTwoStage( item )}">
    {{ item.title }}, 
    {{ item.two.stage }}
    // ...
</li>

由于两段代码完全相同 - 除了模式 - 我想避免代码重复。 (另请注意,最终将不仅仅有两种模式。)

1 个答案:

答案 0 :(得分:2)

我同意迈克尔的说法,你应该重新组织你的代码,但如果你必须一次完成所有这些,你可以根据你使用的角度版本来做到这一点:

// variable mode is either 'one' or 'two'
<li ng-repeat="item in items | orderBy: [ mode + '.stage', mode + '.order'] 
| filter: (mode == 'one' ? oneFilter: twoFilter)" ng-class="{ topline: (mode == 'one' ? isNewOneStage: isNewTwoStage)( item )}">
    {{ item.title }}, 
    {{ item[mode].stage }}
    // ...
</li>