2015-06-30 69 views
1

所以我有一个选择集,我想默认为登录用户的状态。返回的状态JSON是StateCode,例如"MI"角度选择没有得到设置从ng模型分配

<div> 
    <select 
    name="ParentState" 
    ng-model="selectedState" 
    ng-options="s.StateCode for s in cStates track by s.StateID | orderBy:'StateCode'"> 
    </select> 
</div> 

,并在我的控制器

var init = function() { 
    angular.forEach(xStates, function(xS) { 
    if (xS.StateCode == xParentState) { 
     $scope.selectedState = xS.StateID; 
     $scope.vName = "It's working!" + $scope.selectedState; 
    } 
    }); 
} 

init(); 

在init函数的最后一行刚写出来{{ vName }},这样我可以看到的功能是工作和$scope.selectedState值是正确的,例如"MI"将为23,但是页面加载时的选择不会设置为"MI"

回答

1

我认为在这里有几件事情可能会出错,并且我对您的期望结果采取了一些最佳猜测。首先,您的标记中的s.StateCode for s...将填写<option>StateCode。你提到你希望看到"MI",所以让我们改为StateName。其次,默认$scope.selectedState作为我们的模型,没有必要指定StateId - 只需选择对象,AngularJS将满足默认我们的ng-options。这是一个完整的例子,对我以后的想法有一些解释。

<select 
    name="ParentState" 
    ng-model="selectedState" 
    ng-options="s.StateName for s in xStates track by s.StateID | orderBy:'StateCode'"> 

app.controller('ctrl', ['$scope', function($scope) { 

    $scope.xStates = [{'StateCode': 1, 'StateID': 'A', 'StateName': 'AL'}, 
        {'StateCode': 23, 'StateID': 'B', 'StateName': 'MI'}, 
        {'StateCode': 50, 'StateID': 'C', 'StateName': 'Hawaii'}]; 

    angular.forEach($scope.xStates, function (xS) { 
     if (xS.StateCode === 23) { // -- for demo simplicity 
      $scope.selectedState = xS; 
     } 
    }); 
}]); 

JSFiddle Link - 工作演示

+0

我应该提到,正在传递的JSON是'[{“STATEID: '1',StateCode: 'AL' ...}] ' – Spacemancraig

+0

我继续编辑JSFiddle以更接近我的代码,它正在工作......所以我不确定它为什么不能在我的环境中工作。 https://jsfiddle.net/spacemancraig24/1bgeknh5/2/我应该提到这是一个Web部件设置作为Sharepoint 2010中的一个窗体 – Spacemancraig

+0

我不能以消极的方式看到你的环境对此产生影响。你在遇到什么?而且,我必须在JSON设置上做出最佳猜测。 – scniro