我正在使用angular 1.4.12,并且我需要我的应用程序中的选择菜单。 我使用ng-options与从异步函数填充的对象数组,但SELECT没有看到更新,之后仍然是空的。我试着用“追踪”,但它不起作用。 有什么建议吗?谢谢!当ng选项模型更新时,ng ng选项不会更新选择列表
回答
一对夫妇的问题在这里
首先,在NG选项的选择是有点复杂得多,一个简单的绑定。
其次,尝试避免在使用angular进行开发时使用setTimeout。由于称为摘要循环的过程,角绑定知道要更新。在此过程中,会评估绑定并检查更改。这个过程由角度内部触发,并且发生了很多。
然而问题在于setTimeout,因为它不是角度的一部分,不会触发摘要。所以你的选项框上的绑定永远不会更新。为了解决这个问题,angular提供了自己的超时助手。 $超时。
请参阅更新的fiddle以获得工作解决方案。
ng选项需要更新到这样的东西。你可以阅读更多关于NG选项here
<select ng-options="item.subItem.label for item in items" ng-model="model">
</select>
和你的控制器需要注入$超时以上
function MyCtrl($scope, $timeout) {
$scope.name = 'Try';
$scope.items = [];
$scope.model = {};
$timeout(function() {
$scope.items = [
{subItem: {value: "a", label: "1"}},
{subItem: {value: "b", label: "2"}},
];
alert($scope.items.length);
}, 2000);
}
UPDATE提到的原因: 由于在下面的评论中提到,使用外部库它自己的异步操作可能会导致附带的角度摘要问题。一个简单的解决方案是使用angulars诺言库$ q。我已经更新了提琴手以包含这个例子。 Click here to see it
更新的代码如下
function MyCtrl($scope, $q, $timeout) {
$scope.name = 'Try';
$scope.items = [];
$scope.model = {};
function myPromise(){
var deferred = $q.defer();
//Do your pouchDB request here and then call resolve in the pouchDB callback
$timeout(() => {
deferred.resolve("This would be your results object");
}, 2000)
return deferred.promise;
}
myPromise().then((results) => {
$scope.items = [
{subItem: {value: "a", label: "1"}},
{subItem: {value: "b", label: "2"}},
];
alert(results);
});
}
我不使用setTimeout在我的代码中,我使用PouchDB,但在ng对象中需要的数据以异步的方式回溯,所以我在小提琴中使用了setTimeout。在PouchDB查询之后,我试图在回调Pouch承诺时调用$ rootScope。$ apply(),但它不起作用 –
请参阅上面的编辑。基本上使用承诺应该能够帮助你 –
谢谢,我现在试试 –
- 1. 在ng选项中选择不更新
- 2. ng选项不更新选择标签
- 3. 选择ng选项组名称不会更新|动态ng选项组
- 4. ng选项和更新模型
- 5. 加载ng-options前更新模型时的选择选项
- 6. 如何在Angularjs中使用ng选项时更新ng模型?
- 7. NG-模型选择下拉更新 - 角
- 8. 选择选项不绑定ng模型
- 9. ng-class不更新,而ng-if,当选项卡离焦
- 10. 使用ng选项的ng-ng模型
- 11. LumX LX-选择不更新NG-模式
- 12. AngularJs NG选项(柯值)NG-模型= “选择” 不工作
- 13. 角NG-模型NG-选择
- 14. 当选择选项更改时,Knockoutjs模型不会更新
- 15. 在选择选项的Ng模型
- 16. 在选择ng选项时更新控制器变量
- 17. 更新选项时,使用ng-repeat的角度选择丢失选定选项
- 18. NG-模式不更新时选择下拉更新
- 19. NG-模型未能从NG选项
- 20. NG-模型数据没有为选择NG选项结合
- 21. 角度不会使用ng模型更新选择元素
- 22. ng选项中的更多选项
- 23. 过滤NG-选项选择
- 24. AngularJS - NG选项选择值
- 25. AngularJS选择ng选项
- 26. 当ng-model输入更新时ng-repeat不会更新
- 27. 在选择下拉列表中使用ng选项ng-show
- 28. AngularJS,ng-change如何更新其他选择控件的选项
- 29. NG-模式不更新所选值
- 30. 当空选择选项被删除时,ng-change不会触发
你可能不得不分享一些代码。如果你可以在jsFiddle中复制这个问题,那么这将更好 –
http://jsfiddle.net/halirgb/Lvc0u55v/有jsFiddle,问题是只有当ng-options数组在开始时为空 –
你确定那是正确的小提琴?它没有任何使用ng-option –