Angularjs 设置通过ng repeat(角度重复)生成的选择列表的初始值

Angularjs 设置通过ng repeat(角度重复)生成的选择列表的初始值,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我正在使用ng-repeat从关联数组创建选择列表。列表的ng模型绑定到具有某些初始值的范围变量。生成的选项值是数组的键 但是,列表不会使用模型的值初始化。我认为这可能与ng repeat的异步行为有关,因此我创建了一个指令来捕获渲染结束并发出事件。此事件在控制器中捕获,用于重新分配ng模型的值 事件被正确捕获,但对ng模型的更新没有反映 如果我将函数附加到更新变量的按钮,它将正确显示在列表中 我知道这是因为ng repeat的工作方式。我如何解决这个问题?在列表呈现后自动设置初始值 以下是我的

我正在使用ng-repeat从关联数组创建选择列表。列表的ng模型绑定到具有某些初始值的范围变量。生成的选项值是数组的键

但是,列表不会使用模型的值初始化。我认为这可能与ng repeat的异步行为有关,因此我创建了一个指令来捕获渲染结束并发出事件。此事件在控制器中捕获,用于重新分配ng模型的值

事件被正确捕获,但对ng模型的更新没有反映

如果我将函数附加到更新变量的按钮,它将正确显示在列表中

我知道这是因为ng repeat的工作方式。我如何解决这个问题?在列表呈现后自动设置初始值

以下是我的问题的一个例子:

HTML:


您应该使用
ng options
而不是使用
ng repeat
将选项绑定到数组。有关ng选项的更多信息:

检查此工作演示:

只需将
选项更改为:

<option ng-repeat='(tid,groups) in templates' value='{{tid}}' 
    ng-model="value" ng-selected="value === tid" on-last-repeat >{{tid}}</option>

将相关代码放入问题本身。问题应该是自包含的,我们不需要去外部站点仅仅检查初始问题。演示是一个伟大的补充。。。但只应是此处添加的代码的次要代码。但是,如果没有演示,问题的行为将很难理解。这很好。它让人们能够回顾你正在做的事情。然后决定他们是否要进一步回顾演示。谢谢@shoojian的回答。我并不是真的试图通过使用ng selected或ng选项来找到解决方案。我想弄明白为什么捕获ng repeat的结尾并更新模型不起作用,但是通过其他函数更新它却起作用@DeveshSati请检查更新答案中的
说明
。感谢@jdmcnair的回答。我并不是真的试图通过使用ng selected或ng选项来找到解决方案。我想弄明白为什么捕获ng repeat的结尾并更新模型不起作用,但是通过其他函数更新它却起作用!!
  var app=angular.module('gobo',[]);

//Create A Directive To Detect The End Of ng-repeat cycle.
    app.directive('onLastRepeat',function(){
        return function(scope,element,attrs) {
            if(scope.$last) { setTimeout(function(){
                scope.$emit('onRepeatLast',element,attrs);
                },10);
                    }
        };
    });

app.controller('goboCtrl',function($scope){
            //Initial Value
                  $scope.value="2";
       $scope.$on('onRepeatLast', function(scope, element, attrs){
                    $scope.value='3';
          alert($scope.value); });

   //Data Source For ng-repeat
    $scope.templates={};
    $scope.templates["1"]=[{"prop":"value1"}];
    $scope.templates["2"]=[{"prop":"value2"}];
    $scope.templates["3"]=[{"prop":"value3"}];

    $scope.refresh=function(){
            $scope.value="2";      
     };

}); //Controller ends
<option ng-repeat='(tid,groups) in templates' value='{{tid}}' 
    ng-model="value" ng-selected="value === tid" on-last-repeat >{{tid}}</option>
scope.$apply(callback);