2016-01-19 3 views
0

У меня есть директива, как указано ниже,Вызов функции в контроллере нг ракурса из директивы

app.directive('metadataSelectPicker', ['ManagementService', '$timeout', '$location', function (ManagementService, $timeout, $location) { 
return { 
    restrict: 'E', 
    replace: true, 
    templateUrl: 'Views/NgTemplates/DirectiveTemplates/MetaDataSelectPicker.html', 
    link: function (scope, elem, attr) { 
     var promise = ManagementService.getMetaDataList(); 
     promise.then(function (response) { 
      if (response.data.length > 0) { 
       scope.metaDataList = response.data; 
       $timeout(function() { 
        $('.selectpicker').on('change', function() { 
         $('.selectpicker').selectpicker('refresh'); 
         $timeout(function() { 
          if (scope.selectedMetaData == 'Class') { 
           $location.path('/class'); 
          } else { 
           $location.path('/metadata'); 
          } 
         }); 
        }); 
       }); 
      } 
     }, function() { 
      alert('Data fetching failed.'); 
     }); 
    } 
} 
}]); 

MetaDataSelectPicker.html приводится ниже:

<div id="metaDataSelectPicker"> 
<div class="sel_allcustom_name"> 
    <select class="selectpicker show-tick form-control" ng-model="selectedMetaData"> 
     <option ng-repeat="metaData in metaDataList" value="{{metaData.ValueText}}">{{metaData.DisplayText}}</option> 
    </select> 
</div> 
<div class="clearfix"></div> 

Я использую эта директива находится на странице с контроллером homeController. На этой странице я использовал тег ng-view для загрузки другого содержимого. Следующий код используется для перенаправления различных страниц в тег ng-view.

if (scope.selectedMetaData == 'Class') { 
           $location.path('/class'); 
          } else { 
           $location.path('/metadata'); 
          } 

В конфигурации routeProvider для каждого пути ng-view я задал другой контроллер. Вначале я не загружаю никакого представления в ng-view. Но я перенаправляю страницу ng-view при изменении параметров в элементе управления select. На странице контроллера/метаданных у меня есть функция и назначена переменной области. Мне нужно вызвать эту функцию при изменении опции выбора, и если scope.selectedMetaData! = 'Class'. Мне нужно сделать это следующим образом:

if (scope.selectedMetaData == 'Class') { 
           $location.path('/class'); 
          } else { 
           $location.path('/metadata'); 
           scope.doSomething(); 
          } 

Но при изменении опции соответствующий контроллер может быть не загружен. Итак, scope.doSomething(); не будет работать. Я не люблю использовать широковещательное событие. Мне нужно обработать загрузку страницы ng-view и выполнить функцию после этого. Как я могу это сделать? Или предложите мне другой лучший метод. Пожалуйста, помогите мне.

ответ

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