我有 2 个共享同一个 Controller 的 View 。在此 View 的每个 View 中,我都使用解析来检索一些日期,然后再显示它。然后我将它注入(inject)到我的 Controller 中(因此我为每个 View 注入(inject)两个依赖项)。
但问题是,当我从一个 View 转到另一个 View 时,控制台会显示错误,因为它看不到另一个 View 的依赖关系。这是我的路线配置
.state('ambassade', {
url: '/mot_ambassadeur',
views: {
"@": {
templateUrl: "pages/GestionAmbassade/mot_ambassadeur.html",
controller: "GestionAmbassadeController",
resolve: {
informationsAmbassade: function(GestionAmbassadeService) {
return GestionAmbassadeService.getMotAmbassadeurService();
}
}
}
}
})
.state('personnel', {
url: '/personnel',
views: {
"@": {
templateUrl: "pages/GestionAmbassade/personnel.html",
controller: "GestionAmbassadeController",
resolve: {
personnelAmbassade: function(GestionAmbassadeService) {
return GestionAmbassadeService.getPersonnelService();
}
}
}
}
})
这是我的 Controller ,2次注入(inject)是信息大使和人员大使:
.controller('GestionAmbassadeController', function ($rootScope, $scope, $injector, $sce,
informationsAmbassade,
personnelAmbassade) {
$scope.getMotAmbassadeur = function () {
if (localStorage.getItem("lang") == "fr") {
$scope.motAmbassadeur = $sce.trustAsHtml(informationsAmbassade.contents[0].translation.fr_fr.contenu);
$scope.load = true;
}
$scope.photoAmbassadeur = informationsAmbassade.contents[0].content.path;
};
$scope.getPersonnel = function () {
$scope.Personnels = [];
if (localStorage.getItem("lang") == "fr") {
for (var i = 0; i < personnelAmbassade.contents.length; i++) {
//if ( angular.isDefined(res.contents[i].type) && res.contents[i].type.nom == 'personnel' )
$scope.Personnels.push({
nom: $sce.trustAsHtml(personnelAmbassade.contents[i].translation.fr_fr.contenu),
poste: $sce.trustAsHtml(personnelAmbassade.contents[i].translation.fr_fr.titre)
});
}
$scope.load = true;
}
};
因此,当我转到 ambassade 路线时,它看不到 personnalAmbassade 注入(inject),反之亦然。我知道我可以对每个状态使用两个解析,但这是我出于性能目的而避免的。有人可以帮我解决这个“问题”吗?
最佳答案
您应该将 Controller 中的注入(inject)视为来自更多面向对象语言的接口(interface)。
因此将其命名为“entityService”之类的名称,并使您尝试注入(inject)的两个服务都具有可以从 Controller 调用的同名方法。 (或者在您的情况下为“内容”数组)
.controller('GestionAmbassadeController', function ($rootScope, $scope, $injector, $sce,entityService) {
然后在解析中输入:
entityService: return GestionAmbassadeService.getPersonnelService();
或
entityService: return GestionAmbassadeService.getMotAmbassadeurService();
取决于 Controller 实例。
编辑:在这种情况下,为两种状态使用相同的 Controller 似乎不是一个好主意。无论如何,您只能使用两个定义的作用域函数之一。所以最好有单独的 Controller 。
关于javascript - AngularJS 中的多个 View 、多个解析但针对一个 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37725688/