How to determine when ng-options completed a DOM update?

I am trying to implement a jQuery multiselect plugin using a directive inside my application. Here is the selection item:

<select multiple 
        ng-model="data.partyIds" 
        ng-options="party.id as party.name for party in parties" 
        xs-multiselect="parties">
</select>

The model model is partiesloaded via $ http. The multiselect plugin analyzes elements optioninside selectand generates a nice multi-selection.

Is there a way to detect when an element is selectfilled with parameters, so I can tell the multi-selection plan to update its data?

Here is my directive:

machineXs.directive("xsMultiselect", function() {
    return {
        restrict: "A",
        require: '?ngModel',
        link: function(scope, element, attrs, ngModel) {
            element.multiselect().multiselectfilter();
            scope.$watch(scope[attrs["xsMultiselect"]], function() {
                // I tried watching but it doesn't help
                element.multiselect('refresh');
                element.multiselectfilter("updateCache");
            });
        }
    }
});
+5
source share
1 answer

As discussed in the comments, use

scope.$watch(attrs.xsMultiselect, ...)

, , ngOptions DOM. , , $evalAsync() $timeout(). $evalAsync , DOM. $timeout() , DOM.

scope.$watch(attrs.xsMultiselect, function() {
   scope.$evalAsync(function() {
      element.multiselect('refresh');
      element.multiselectfilter("updateCache");
   });
});

, , DOM :

scope.$watch(attrs.xsMultiselect, function() {
   $timeout(function() {
      element.multiselect('refresh');
      element.multiselectfilter("updateCache");
   });
});
+5

All Articles