У меня есть директива, как указано ниже,Вызов функции в контроллере нг ракурса из директивы
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 и выполнить функцию после этого. Как я могу это сделать? Или предложите мне другой лучший метод. Пожалуйста, помогите мне.