Я вызываю бэкэнд-API, используя фабричный метод в angular.Заводской метод возвращает $http
напрямую.В моем контроллере я вызываю фабричный метод и извлекаю данные.Фабрика вернула обещание, вскоре его прикрепили.тогда и написали метод успеха.Внутри у меня есть $ctrl.currentImageDesc = data.description
.Я правильно получаю значение data.URL из API, оно также обновляется до переменной currentImageDesc, но не отображается в поле зрения.Я обращаюсь к нему в виде {{$ctrl.currentImageDesc}}
Дополнительная информация добавлена 17-05-2018: На самом деле внутри основного компонента 'imageGallery' есть дочерний компонент 'carbonGalleryTabs'.Сегодня обнаруживается, что когда к этому дочернему компоненту нет доступа в HTML, данные основного компонента должным образом отражают представление.Когда я добавляю тег в html, дочерний компонент работает нормально, но данные основного компонента не отображаются в представлении.
Я обновил код, чтобы показать подробности о дочернем компоненте.
Заводское обслуживание
angular.module('sharedModule').factory('GalleryDataService', galleryFactory)
galleryFactory.inject = ['$http', '$q']
function galleryFactory($http, $q) {
var serviceUrl = $m.basepath + 'antibody-figures?assayId=';
console.log('urllll',serviceUrl);
return {
fetchData : function(productid) {
return $http({
method: 'GET',
url: serviceUrl + productid
})
}
};
}
Код компонента
angular.module('sharedModule').component('antibodyGalleryTabs', {
template: 'TTTTTT<div class="tabs-container"><div class="nav-wrapper"><ul class="nav nav-pills"><li class="tab" ng-repeat="application in $ctrl.navPillsData" ng-class="{ \'tab--active\' : $ctrl.selectednav == application.abbreviation }"><a>{{ application.abbreviation }}</a></li></ul></div></div>',
bindings:{
navPillsData:'<',
selectedNav:'@'
},
controller:antibodyGalleryTabsController
});
function antibodyGalleryTabsController(){
$ctrl = this;
}
angular.module('sharedModule').component('imageGallery', {
templateUrl: 'assets/shared-module/app/components/image-gallery/image-gallery.template.html',
controller: imageGalleryController,
bindings: {
}
});
Код контроллера компонента
imageGalleryController.$inject = ['$q','$scope', '$attrs', '$element','GalleryDataService'];
function imageGalleryController($q,$scope, $attrs, $element, GalleryDataService) {
$ctrl = this;
$ctrl.selectednav = 'nav2';
$ctrl.totalImages = 7; //this is getting updated and aslo reflected in view
$q.when(GalleryDataService.fetchData('A11126'))
.then(function (data){
$ctrl.navPillsData = [{abbreviation:'nav1'},{abbreviation:'nav2'}];//this array is generated from the 'data'. This is reflected in view correctly
var img = data.data[0].links[5];
img.index = 5;
$ctrl.totalImages = 27;
updateCurrentImageDetails(img);
});
function updateCurrentImageDetails(currentImage){
//these variables are getting updated but not reflected in view
$ctrl.currentImageNum = currentImage.index;
$ctrl.currentImageUrl = currentImage.url.src;
$ctrl.currentImageTitle = currentImage.title;
$ctrl.currentImageDesc = currentImage.description;
}
}
HTML-шаблон
<div class="adv-cert-gallery drawer-gallery">
<antibody-gallery-tabs navPillsData='$ctrl.navPillsData' selectedNav='$ctrl.selectednav'></antibody-gallery-tabs>
<img src="{{$ctrl.currentImageUrl}}">
</div>
Доступ к компоненту
<image-gallery></image-gallery>