我的代码的简化版本如下:
var app = angular.module("App", ['ui.select2']);
app.controller("MainController", function ($scope) {
$scope.select2Options1 = {
data: [{id: 0, text: "Foo"}, {id: 1, text: "Bar"}]
};
$scope.select2Options2 = {
data: []
};
$scope.$watch('chosen1', function (newVal, oldVal) {
if (newVal !== undefined && newVal !== null) {
console.log("Valid value selected: " + newVal);
$scope.select2Options2.data.push({id: 0, text: "FooBar"});
}
});
});标记:
<html>
<head>
<link rel="stylesheet" href="bower_components/select2/select2.css">
<script type="text/javascript" src="bower_components/jquery/jquery.js"></script>
<script type="text/javascript" src="bower_components/select2/select2.js"></script>
<script type="text/javascript" src="bower_components/angular/angular.js"></script>
<script type="text/javascript" src="bower_components/angular-ui-select2/src/select2.js"></script>
<script src="app.js"></script>
</head>
<body ng-app="App">
<input ng-controller="MainController" ng-model="chosen1" ui-select2="select2Options1" style="width:100px">
<input ng-controller="MainController" ng-model="chosen2" ui-select2="select2Options2" style="width:100px">
</body>
</html>我想要做的是,当从另一个ui-select2 ($scope.select2Options1.data)中选择某些内容时,更新ui-select2 ($scope.select2Options1.data)的内容。
问题是,无论我在ui-select2的处理程序中做了什么,第二个$scope.$watch的内容都不会被更新。如果我将这个$scope.select2Options2.data.push({id: 0, text: "FooBar"});移出监视处理程序之外,它就能工作,第二个ui-select2就会被填充。这意味着,一定有什么根本的错误。
有什么建议怎么解决吗?
发布于 2014-02-05 15:51:45
造成这个问题的根本原因似乎是我两次在HTML中定义了MainController。用ng-控制器=“MainController”将所有内容封装在一个div中,就解决了这个问题。
发布于 2014-02-04 19:22:30
我相信你没有像建议的那样使用模块。请阅读https://github.com/angular-ui/ui-select2的文档。
在角度上启用<select>选项的方法是使用ng-options指令.然而,ui-select2 2并不完全支持这个指令,建议使用<option>标记。在你的情况下,应该是这样的:
<select ui-select2 ng-model="select2" data-placeholder="Pick a number">
<option value=""></option>
<option ng-repeat="item in select2Options2" value="{{item.id}}">{{item.text}}</option>
</select>请注意,与使用ng-选项不同,通过ng-model存储的选定对象将是字符串表示,而不是实际的对象。这是在使用ui-select2 2时的一个限制。因此,请注意,chosen2中存储的是{{item.id}} (字符串)的值,而不是{id: 0, text: "Foo"}对象。
最后,为什么它在你的情况下部分起作用?原因是,您使用select2内部函数来生成选项。这就像初始化时一样正常工作,但是在这个select2options.data字段上没有设置手表(Select2不知道任何关于角的知识)。因此,初始化时存在的任何数据都会显示出来,但是任何更新都不会出现。
https://stackoverflow.com/questions/21559790
复制相似问题