解決angularJS chosen列表不更新的方法

咱們都知道,chosen更新值的代碼是這個javascript

$(xxx).trigger("chosen:updated");//新版

$(xxx).trigger("liszt:updated");//舊版

一般來講,若是用的是jq,那麼在append之後,直接跟上上面的代碼之後,chosen的值就會同步更新了。java

可是!可是!可是!若是用的是angular,那麼分爲兩種狀況:app

一、在當前angular的上下文中動態添加或修改了值,通常是用ng-repeat,此時在後面加上上面的代碼便可。code

二、不在當前angular的上下文中動態添加或修改了值,那麼直接在後面加上上面的代碼,是無效的!!!,由於chosen的值是根據select標籤的值來更新的,而select標籤的值是受angular的ng-repeat影響的,若是沒有把值在angular中更新的話,只在chosen中更新值是沒有任何做用的。所以,咱們在非angular的上下文中修改了值之後,須要加上下面的代碼把值在angular中更新一下:ip

$scope.$apply();

 

經過$timeout來解決:同步

一、首先將ng-options改成option ng-repeat,如:<option ng-repeat="m in ms" value="{{m}}">{{m}}</options>io

二、動態改變了ms了以後,加入如下代碼:function

$scope.ms = data.obj.models;
                $timeout(function() {
                    $("#model_select").trigger("chosen:updated");
                }, 0, false);
相關文章
相關標籤/搜索