ng-options в angularjs не перепривязывается после изменения в коллекции

Я использую dataFactory для получения коллекции путем вызова API.

    productApp.factory("productDataFactory", function($http){
  return {
    getUnits: function() {
      return $http.get('/unit').then(function(resp) {
        return resp.data; // success callback returns this
      });
    },
    getCommodities: function() {
      return $http.get('/commodity').then((resp) => {
        return resp.data;
      })
    }
  };

});

Я использую коллекцию товаров в ng-options, чтобы заполнить опции элемента select.

<select ng-model='selected_Commodity' ng-change="updateGST()" name="commodity" id="commodity" ng-options = " c as c.commodity_name for c in <%= JSON.stringify(commodities) %> track by c "class="form-control  selectpicker" data-size="4" data-live-search="true" data-index="5" >
                              <option value="" ng-hide='selected_Commodity'>Select Commodity</option>
                              </select>

Я обновляю коллекцию на мероприятии. Я получаю обновленные значения в журнале. Но это не отражается в моем представлении.

var getCommodities = function() {
    var deferred = $q.defer();
    productDataFactory.getCommodities().then((data) => {
      if (data.type === 'success') {
        debugger;
        console.log("Inside factory ");
        console.log(JSON.stringify(  data.commodities ));
        deferred.resolve(data.commodities);

      } else {
        // $scope.commodities = [{name : data.type + data.msg}]
        deferred.reject([{name : data.type + data.msg}]);
      }

    })
    return deferred.promise;
  }

$('#commodityModal').on('hide.bs.modal', function () {
    $scope.commodities = []
    getCommodities().then((data) => {
      $scope.commodities = data
      console.log("Inside Hide ");
      console.log(JSON.stringify(  $scope.commodities ));
      $("#commodity").selectpicker('refresh')
      console.log("Refreshed");
    })

  })

Пожалуйста, помогите мне, как я могу привязать мои выбранные элементы с обновленными значениями.

2 ответа

Поместите эту строку в тайм-аут, как это, и добавьте тайм-аут в качестве зависимости

$timeout(function(){
   $("#commodity").selectpicker('refresh');
});

Измените параметры ng

ОТ

ng-options = " c as c.commodity_name for c in <%= JSON.stringify(commodities) %> track by c "

К

ng-options = " c as c.commodity_name for c in commodities track by c " 
Другие вопросы по тегам