2014-12-11 1 views
0

У меня есть настраиваемая директива, отображающая выпадающий список.Обновление параметров ng, размещенных по директиве

Возможно ли динамическое повторное заполнение ng-параметров из источника данных, который поступает от контроллера, на котором размещена директива.

Источник данных исходит от службы. В настоящее время он работает хорошо из исходного массива, переданного в директиву, но при добавлении новых данных (от контроллера/услуг для этого массива я хотел бы, чтобы обновить список элементов.

Любой помощь?

EDIT :

Это, как я использую свою директиву

<select-item-obj-from-array datasource="ctrl.ActivityAddresses" ng-model="form.Activity.AddressID" name="AddressID" value="AddressID" label="City" .... /> 

Моя директива выглядит следующим образом:.

app.directive('selectItemObjFromArray', function() { 
return { 
    restrict: 'E', 
    replace: true, 
    template: function (element, attrs) { 
     var tpl = ''; 
     tpl += "<div><div class=\"form-group clearfix\" >"; 
     tpl += '<label for="' + attrs.name + '" class="col-lg-3 control-label">' + attrs.label + '</label>'; 
     tpl += '<div class="col-lg-9">'; 
     tpl += '<select ng-disabled="ngDisabled" name="' + attrs.name + '" ng-model="ngModel" chosen="datasource" ng-options="c.Name for c in datasource"></select>'; 

     tpl += '</div>'; 
     tpl += '</div>'; 
     tpl += '</div>'; 
     return tpl; 
    }, 
    scope: { 
     ngModel: "=", 
     datasource: "=" 
    }, 
    link: function (scope, elem, attrs) { 
     var select = elem.find("select").eq(0); 
     select.chosen(); 
     scope.$watch(function() { 
      return select[0].length; 
     }, 
     function (newvalue, oldvalue) { 
      if (newvalue !== oldvalue) { 
       select.trigger("chosen:updated"); 
      } 
     }); 
     scope.$watch(attrs.ngModel, function() { 
      select.trigger('chosen:updated'); 
     }); 
    } 
}; 
}); 

если мой контроллер/сервис обновил ctrl.ActivityAddresses я не знаю, как «reinvoke» директиву, чтобы обновить DropDownList ..

ответ

0

Вы можете вещать от службы, как это:

var broadcast = function() { 
    $rootScope.$broadcast('items.update'); 
}; 

Предполагая, что элементы являются массивом.

Тогда вы можете поймать передачу в контроллере или директивы:

$scope.$on('items.update', function (event) { 
    //Do whatever you want with the items. 
}); 

Я думаю, что это то, что вы хотите? Для этого вам не нужно менять директиву ng-options.

Смежные вопросы