当前位置: 首页 > 知识库问答 >
问题:

不同选项卡中控制器之间的Angularjs通信[副本]

慕嘉运
2023-03-14

我有控制器A,它将一些数据发送给共享服务,控制器B应该读取这些数据。问题是控制器B与控制器a在不同的页面(在同一网站上),即我做SMTH。在控制器A上,单击按钮(向服务发送数据)并打开另一个页面,其中是控制器B,它应该从服务读取数据。但是什么也没有发生,所以我的问题是,不同页面上的控制器能这样通信吗?

以下是我如何尝试去做,但没有运气:

服务:

publicApp.angularModule.service('controllerCommunicationService', function ($rootScope) {
    var communicationService = {};
    communicationService.data = null;

    communicationService.setDataForBroadcast = function(data) {
        this.data = data;
        this.broadcastData();
    };

    communicationService.broadcastData = function() {
        $rootScope.$broadcast('handleBroadcast');
    };

    return communicationService;
});

控制器A相关部分:

publicApp.angularModule.controller('PublicRoutinesCtrl', function ($scope, $rootScope, routinesService, controllerCommunicationService, bootstrapCarouselService) {


    $scope.goToNextScreen = function() {
        var currentIndex = bootstrapCarouselService.getcurrentSlideIndex();
        controllerCommunicationService.setDataForBroadcast($scope.items[currentIndex].Routine.RoutineId);



    };

控制器B相关部分:

 $rootScope.$on('handleBroadcast', function () {
        console.log("TEST");
        $http.post("/EditWorkout/PostRoutineId", { routineId: controllerCommunicationService.data })
             .success(function() {
                 console.log("success");
             })
            .error(function (responseData) {
            console.log("Error !" + responseData);
        });
    });

甚至console.log(“test”);也不会被激发。

共有2个答案

广宏远
2023-03-14

根据你的问题

我的问题是,不同页面上的控制器能这样通信吗?

答案是否定的。Angular和javascript不是这样设计的。

但是,如果您的意思是在同一页面上有不同的视图,那么是的,您可以使用一个服务。服务是单例的,并且在保存在同一页上时跨控制器保存它们的数据。

如果您真的想要将数据从一个页面发送到另一个页面,您的选择是通过查询字符串(在url上)或发布数据,或者如果您只支持现代浏览器,那么您可以使用客户端本地存储(http://www.w3schools.com/html/html5_webstorage.asp)

和魁
2023-03-14

还有另外两种方法可以在标签之间进行通信。通过具有全局域的cookie,不推荐使用全局域,因为不安全。

或使用PostMessage:

https://developer.mozilla.org/en-us/docs/web/api/window.postmessage?redirectlocale=en-us

演示:

http://html5demos.com/postmessage2

和浏览器支持:

http://caniuse.com/#feat=x-doc-messaging

 类似资料:
  • 本文向大家介绍AngularJS控制器之间的通信方式详解,包括了AngularJS控制器之间的通信方式详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了AngularJS控制器之间的通信方式。分享给大家供大家参考,具体如下: 一、利用作用域的继承方式 由于作用域的继承是基于js的原型继承方式,所以这里分为两种情况,当作用域上面的值为基本类型的时候,修改父作用域上面的值会影响到子作用域,反

  • 我正在寻找一种方法,如何在浏览器中的多个选项卡或窗口之间进行通信(在同一个域上,而不是CORS上)而不留下痕迹。有几种解决办法: 使用窗口对象 邮件后传 Cookies 本地存储 第一种可能是最糟糕的解决方案--你需要从你当前的窗口打开一个窗口,然后你只能在保持窗口打开的情况下进行交流。如果您在任何窗口中重新加载该页,则很可能会丢失通信。 第二种方法,使用postMessage,可能可以实现跨源通

  • 我有两个网站,例如: foo.example.com bar.example.com 我想发送一些消息之间的网站,如果有打开在不同的标签。 有不同的可能方式: 邮件后传 SharedWorker 本地存储 但每一个都需要相同的来源或对Window.Opener的访问... 如果顶部域相同,则有解决方案浏览器端用于选项卡之间的通信?

  • 我已经搜索了很多关于如何使用SlidengTablayout在片段之间进行通信的内容,但还没有找到一个好的答案。我知道使用ActionBar,但我想要的是androidLollipop使用SlidingTabLayout的新方式。我试过了-

  • 本文向大家介绍AngularJS控制器之间的数据共享及通信详解,包括了AngularJS控制器之间的数据共享及通信详解的使用技巧和注意事项,需要的朋友参考一下 AngularJS 本身已经提供了像指令 Directive 和 服务 Service 一类的方式,来实现数据和代码的共享和复用,但在实际的项目开发中,或许是处于懒惰,亦或是为了便利,总会想在两个控制器之间,直接进行数据的共享通信,或者是函

  • 问题内容: 我对Controllers and Views(fxml)进行了结构化,以尽可能地分隔我的代码,我想知道如何在2个控制器之间进行通信。我的意思是,一个控制器必须调用另一个控制器的某些功能才能将其设置为最新状态。 我认为我当前结构的模式将更加明确: 控制器1 / \ fx:include fx:include / \ Controller2 Controller3 每个控制器都有自己的f