标签: angular-broadcast

Angularjs $播放一次,$播放两次

它从rootScope发送一次$ broadcast,但是监听器($ on)被调用两次.

监听器位于控制器中,$rootScope.$on而不是使用$scope.$on.有人有这个问题吗?

编辑

rootScope:

$rootScope.$broadcast('menuActivateAction' + item.event_name_postfix, item.event_args);
Run Code Online (Sandbox Code Playgroud)

其他控制器:

$rootScope.$on('menuActivateActionPublish', function(event) {});
Run Code Online (Sandbox Code Playgroud)

javascript event-listener angularjs angularjs-scope angular-broadcast

18
推荐指数
2
解决办法
2万
查看次数

从angularjs中的服务调用控制器功能

我正在使用socket.io在我的应用程序中启用聊天,我正在使用服务SocketService来执行所有套接字的东西.当消息出现时,我想从服务触发控制器的功能,以SocketService在UI中进行一些更改.所以我想知道如何从服务中访问控制器的功能.示例代码:

.service('SocketService', function ($http,$rootScope,$q) {
  this.connect = function(){
    var socket = io();
    socket.on('connect',function(){
      // Call a function named 'someFunction' in controller 'ChatController'
    });
  }
});
Run Code Online (Sandbox Code Playgroud)

这是服务的示例代码.

现在是控制器的代码

.controller('ChatController',function('SocketService',$scope){
  $scope.someFunction = function(){
     // Some Code Here
  }
});
Run Code Online (Sandbox Code Playgroud)

events angularjs angularjs-service angularjs-controller angular-broadcast

13
推荐指数
1
解决办法
2万
查看次数

Angular - 广播,$ on在指令中被多次调用

我正在开发一个带有角度的单页应用程序,我需要在2个不同的指令之间进行通信,这些指令基本上没有父子关系.

在指令A中,我有2个地方需要从不同的功能广播相同的事件.在指令B中,已经为此写了一个听众.

现在,我观察到第一次调用callFirstFunc及其广播时,将调用一次监听器.在后续调用时,监听器被调用两次,三次等等,它继续增加.

callFirstFunc被执行时调用callSecondFunc,因此对此的监听器也被称为no.在callFirstFunc中广播的监听器的次数.那么,为什么听众只被调用一次,为什么多次?它每次都在循环和增加.

指令A:

app.directive("firstDir", function ($rootScope) {
    return {
        restrict: 'E',
        link: function (scope, element, attrs) {
            // some other code
            callFirstFunc();
            var callFirstFunc = function(){
                // some other code
                $rootScope.$broadcast("someEvent");
            }
            callSecondFunc();
            var callSecondFunc = function(){
                // some other code
                $rootScope.$broadcast("someEvent");
            }
        }
    };
});
Run Code Online (Sandbox Code Playgroud)

指令B:

app.directive("secondDir", function ($rootScope) {
        return {
            restrict: 'E',
            link: function (scope, element, attrs) {
                // some other code
                scope.$on("someEvent", function(){
                    detectSTuff();
                }) 
               function detectStuff(){
                  // other code
               }                    
            }
        };
    });
Run Code Online (Sandbox Code Playgroud)

angularjs angularjs-directive angularjs-scope angular-broadcast

6
推荐指数
1
解决办法
4667
查看次数

$rootScope.$broadcast 不工作

我试图让 $rootScope.$broadcast 刷新我的视图。服务是——

var app = angular.module("productsApp", [])
    .service("serviceProvider", function ($http) {
        this.getDatas = function getDatas(data) {
            return $http({
                method: 'POST', url: serviceUrl + '/GetProductsByCategoryOrName', headers: {
                    'Authorization': apiKey
                },
                data: data
            })
        }
        return this
    }).factory("sharedService", function ($rootScope) {

        var mySharedService = {};

        mySharedService.values = [];

        mySharedService.passData = function (newData) {
            mySharedService.values = newData;
            $rootScope.$broadcast('dataPassed', newData);
        }

        return mySharedService;
    });
Run Code Online (Sandbox Code Playgroud)

通过控制器调用-

function searchProductsController($scope, $window, serviceProvider, sharedService) {
    $scope.submit = function () {
        var data = { "query": $scope.searchText, "categoryId": …
Run Code Online (Sandbox Code Playgroud)

angularjs angularjs-directive angular-broadcast

5
推荐指数
1
解决办法
1万
查看次数

如何以角度没有父子关系的方式向其他控制器广播和发送事件

我试图从这篇文章中获得提示 - 使用$ scope.$ emit和$ scope.$ on 但是当控制器彼此无关时,似乎没有任何工作.

那是 -

<div ng-controller="CtrlA">
</div>

<div ng-controller="CtrlB">
</div>
Run Code Online (Sandbox Code Playgroud)

在CtrlB中我会做这样的事情:

$rootScope.$broadcast('userHasLoggedIn', {})
Run Code Online (Sandbox Code Playgroud)

在CtrlA中,我会这样听:

$rootScope.$on('userHasLoggedIn, function(event, data){});
Run Code Online (Sandbox Code Playgroud)

并且没有 - 除非我在CtrlA div中嵌入CtrlB div,否则CtrlA永远不会收到广播事件

任何的想法?

angularjs angular-services angular-broadcast

0
推荐指数
1
解决办法
667
查看次数