【发布时间】:2013-02-05 22:08:01
【问题描述】:
我的情况是我想使用 Select2 小部件的 createSearchChoice 功能。所以我发现我需要使用 html 输入元素而不是选择元素,所以我不能使用 ng-repeat 来填充 select2 小部件。我发现有一个“数据”选项,并且能够使用静态数据填充 select2 小部件,但当我尝试动态填充它时却不行。
什么有效:
html:
<input class='select2' ui-select2='sel2props' type='hidden'>
在控制器中:
$scope.sel2props = {
createSearchChoice: ...
data: [
{ id: 0, text: 'yabba' }
etc
]
};
但是,如果我尝试将数据设置为一个变量,然后我可以将其设置为数据库提供给我的任何内容,则不会填充小部件。
data: $scope.data;
function to retrieve data {
$scope.data = retrieved data;
}
检索到的数据完全按照指定的方式。
如果我设置一个按钮来附加数据键,它将起作用:
$scope.appenddata = function () {
$scope.data.push({id:1, text: 'anot'});
};
所以我认为这是一个时间问题,我尝试了 $digest 和 $apply 但它们在控制器中不起作用。我试图设置一个指令,实际上可以做简单的小部件,但不能做 select2,所以我希望不要走那条路,也就是说我走那条路淹死了。如果有人能帮忙,那就太好了。
【问题讨论】:
-
“我尝试了 $digest 和 $apply 但它们在控制器中不起作用”是什么意思?他们在任何可以访问范围的地方工作。你是这样运行的吗
$scope.$apply()? -
@bmleite。不正确。你会得到一个错误:$apply 已经在控制器中进行了。
-
那是因为你在错误的地方打电话给
$apply。它与控制器无关。如果您想要一种避免错误的简单方法,请将控制器内对$scope.$apply()的所有调用替换为$scope.$$phase || $scope.$apply()。请注意,这不会解决您的问题,它只会避免错误。请提供一个 jsfiddle 来解决您的问题。