我正在尝试显示从数据存储加载的一些数据,但它没有反映 UI 上的更改。我创建了一个示例来展示我想要实现的目标的一般概念。
这是 angularjs 示例的链接,它们在单击时显示,然后下拉菜单被清除。如果将表达式替换为列表下拉列表中的一种颜色,则选择正确。这种类型的选择是否仅适用于用户事件?
http://docs.angularjs.org/api/ng.directive:select
帮助表示赞赏!
我正在尝试显示从数据存储加载的一些数据,但它没有反映 UI 上的更改。我创建了一个示例来展示我想要实现的目标的一般概念。
这是 angularjs 示例的链接,它们在单击时显示,然后下拉菜单被清除。如果将表达式替换为列表下拉列表中的一种颜色,则选择正确。这种类型的选择是否仅适用于用户事件?
http://docs.angularjs.org/api/ng.directive:select
帮助表示赞赏!
实际上问题在于 ngSelect 使用简单的比较运算符 ('==') 比较对象,因此具有相同字段和值的两个对象被视为不同的对象。
因此,您最好使用字符串和数字作为值(ngSelect 指令表达式中的“选择”参数)。
另外在 GitHub 上有一些关于这个主题的讨论: https ://github.com/angular/angular.js/issues/1302 https://github.com/angular/angular.js/issues/1032
此外,正如我所指出的,还有一些关于为 ngSelect 添加自定义比较器/散列以便能够更轻松地在对象上使用 ngSelect 的工作。
控制器初始化中的一个错误。您必须引用 中的对象palette
,因为这些对象是在视图中观看的:
$scope.selectedColors.push({col: $scope.palette[2]});
$scope.selectedColors.push({col: $scope.palette[1]});
与您的相同result
:
$scope.result = { color: $scope.obj.codes[2] };
那你需要看result
. 在下面的示例中,选择 1 接收来自初始选择的值,第二个接收调色板中的以下值。我不知道这是否是您想要的,但您可以轻松更改它:
$scope.$watch('result', function(value) {
if(value) {
var index = value.color.code -1;
$scope.selectedColors[0] = {col: $scope.palette[index] };
$scope.selectedColors[1] = {col: $scope.palette[Math.max(index-1, 0)] };
}
}, true);
请参阅plunkr。
好的,我想我想通了,但感谢@ValentynShybanov 和@asgoth。
根据 angularjs 示例,ngModel 使用下拉列表中使用的数组中的对象之一进行初始化。所以有一个数组:
$scope.locations = [{ state: 'FL', city: 'Tampa'}, {state: 'FL', city: 'Sarasota'} ....];
下拉列表定义为:
<select ng-options="l.state group by l.city for l in locations" ng-model="city" required></select>
然后 $scope.city 被初始化为:
$scope.city = $scope.locations[0];
到目前为止一切顺利,对吧?!!!.. 但我有多个位置,因此有多个下拉菜单。用户也可以添加/删除更多。就像动态创建表一样。而且,我需要从数据存储中加载数据。
虽然我正在构建并分配一个类似的值(例如:来自数据存储的值 --> State = FL,City = Tampa;因此 --> { state : 'FL', city : 'Tampa' }),但 angularjs 不是能够匹配的值。我尝试了不同的方法,比如只分配 { city : 'Tampa' } or 'Tampa' or and or and or ...
所以我所做的......我知道这有点讨厌,但到目前为止工作......是编写一个查找函数来从 $scope.locations 返回值。因此我有:
$scope.lookupLocation = function(state, city){
for(var k = 0; k < $scope.locations.length; k++){
if($scope.locations[k].state == state && $scope.locations[k].city == city)
return $scope.locations[k];
}
return $scope.locations[0]; //-- default value if none matched
}
因此,当我从数据存储区加载数据(json 格式的数据)时,我会调用 lookupLocation 函数,例如:
$scope.city = $scope.lookupLocation(results[indexFromSomeLoop].location.state, results[indexFromSomeLoop].location.city);
这会在加载数据时预先选择我的值。这对我有用。
谢谢