Angular JS:无法在ng-repeat内设置ng-model变量的值

时间:2014-08-12 16:52:59

标签: javascript angularjs angularjs-ng-repeat angular-ngmodel

  1. 我有以下代码正常工作。也就是说,它显示组合框中包含国家名称,当我在组合框中选择一个国家时,它会打印"过滤数据:"

        

        <span class="input-group-btn">
            <button type="button" class="btn btn-default" ng-click=""><i class="glyphicon glyphicon-globe"></i>&nbsp;Country</button>
            <select class="form-control" style="width:200px;" ng-model="filters" ng-options="country.name for country in countries"></select>
        </span>
    
        Filter Data: {{filters}}
    
    </div>
    

    在上面的代码中,我使用ng-init =&#34;过滤器&#34;声明了一个范围变量。 (而不是通过控制器),我试图将选定的组合项目设置为此变量。它运作良好。

  2. 然后我用以下 ng-repeat 代码替换了上面的代码:

        

        <span ng-repeat="filter in filterList">
            <button type="button" class="btn btn-default" style="width:75px" ng-click="">{{filter.filterLabel}}</button>
    
            <span ng-switch="filter.filterType">
                <span ng-switch-when="combo"><select class="form-control" style="width:200px" ng-model="filters" ng-options="country.name for country in filter.countryData"></select></span>
            </span>
        </span>
    
        Filter Data: {{filters}}
    
    </div>
    

    上面的代码虽然在组合框中显示国家/地区名称,但当我选择一个国家/地区时,它不会显示任何接近&#34;过滤数据&#34;的内容。我认为可能是范围变量&#34;过滤器&#34;在ng-repeat(只是一个猜测)附近是不可见的,因此也尝试了也没有工作。

  3. 问题:

    1. 你能帮我理解为什么ng-model =&#34;过滤器&#34;没有设置范围变量&#39;过滤器&#39;并让我打印出来?

    2. 我还想在ng-model中动态创建变量名。像ng-model =&#34;过滤器。{{filter.filterType}}&#34;。我尝试过但从未得到任何结果。它没有显示{{filters}}。在浏览Stackoverlow上的一些帖子后,我尝试了ng-model =&#34;过滤器。[filter.filterLabel]&#34;。这实际上是通过一些JS错误(当我在国家/地区组合中选择一个项目时,说出TypeError:无法设置属性&#39;未定义的国家/地区)。它似乎无法在过滤器中找到Country(这是[filter.filterLabel]的结果)。因此,我宣布ng-model的方式显然有些不对。

    3. 使用上面的代码(我想使用范围变量ng-init =&#34; filters&#34;),你能帮我正确地为所选项目动态生成ng-model变量名称吗?并且能够使用{{filters}}

      更新

      这是演示我的问题的小提琴:http://jsfiddle.net/ramarajuv/ag2crnk7/ 请帮我纠正。

      提前谢谢大家。

1 个答案:

答案 0 :(得分:2)

搞定了。

  1. 首先,在控制器范围内创建过滤器变量:

    $scope.filters = {
        "Country":{},
        "President of Country":{}
    };
    
  2. 然后,格式化ng-model为:

    ng-model="filters[filter.filterMap]
    
相关问题