Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 在数据结构的模式/访问部分之间切换_Angularjs - Fatal编程技术网

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

Angularjs 在数据结构的模式/访问部分之间切换,angularjs,Angularjs,鉴于以下数据: { id: "", title: "", // modes one: { stage: 1, order: 3, more: "", } two: { stage: 14, order: 5,

鉴于以下数据:

    {
        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>
//如果选择的模式为“一”
  • {{item.title}}, {{item.one.stage} // ...
  • //如果选择的模式为“2”
  • {{item.title}}, {{item.two.stage} // ...

  • 由于这两段代码完全相同——除了模式之外——我希望避免代码重复。(还请注意,最终将有不止两种模式。)

    我同意Michael的观点,您可能应该重新组织代码,但如果您必须同时拥有所有代码,则可以根据您使用的angular版本执行此操作:

    // 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>
    
    //变量模式为“一”或“二”
    
  • {{item.title}}, {{item[mode].stage} // ...

  • 我建议将此数据结构转换为更合适的表示形式。我认为您必须迭代对象的属性,并确定它是否是一个对象(一,二,…)。可能有一种解决方案可以直接在html中以您想要的方式进行迭代,但这将成为不可读的代码。您可以在加载数据的服务或控制器中进行转换。谢谢,一旦我意识到
    item[mode]
    是有效的表示法,我就设法重新组织了一些代码,以便根据模式变量进行切换。现在很干净:)