javascript - AngularJS 中的多个 View 、多个解析但针对一个 Controller

标签 javascript angularjs angular-ui-router resolve

我有 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/

相关文章:

javascript - 如何移动背景图像图案?

javascript - 将鼠标悬停在图像上以显示由 alt 标签链接的更大的隐藏图像?

javascript - 通过属性进行 Angular 查找

javascript - Angular ui-router resolve - 使用 $state.go

javascript - UI 路由器 $stateParams 是只读的

javascript - 即使使用了 ng-csp 指令,eval 也会被执行

javascript - 如何在 POST 方法中使用 dns.lookup() ?

html - ng-水平重复

javascript - AngularJS Controller 函数从未被调用

html - Angular1 : TypeError: promise. catch 不是函数