Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs $broadcast到当前作用域 序言,我有一个通过网络套接字连接到节点服务器的离子应用程序,节点服务器通过TCP套接字连接到C++应用程序。我有一个服务,它连接并为套接字提供服务,但也监视nack响应,以便它可以发出警报,通知用户错误: (function(){ 'use strict'; angular.module('tacoCorp.services') .factory('Socket', Socket); Socket.$inject = ['socketFactory', 'OSDP', '$rootScope']; function Socket(socketFactory, OSDP, $rootScope) { var socket = io('localhost:3000'); socket = socketFactory({ioSocket: socket}); socket.on('connect', function() { console.log('connected'); }); socket.on('nack', function(data) { console.log(data); var error = OSDP.parse(data); $rootScope.$broadcast('nack', error); }); return socket; } }());_Angularjs_Ionic Framework - Fatal编程技术网

Angularjs $broadcast到当前作用域 序言,我有一个通过网络套接字连接到节点服务器的离子应用程序,节点服务器通过TCP套接字连接到C++应用程序。我有一个服务,它连接并为套接字提供服务,但也监视nack响应,以便它可以发出警报,通知用户错误: (function(){ 'use strict'; angular.module('tacoCorp.services') .factory('Socket', Socket); Socket.$inject = ['socketFactory', 'OSDP', '$rootScope']; function Socket(socketFactory, OSDP, $rootScope) { var socket = io('localhost:3000'); socket = socketFactory({ioSocket: socket}); socket.on('connect', function() { console.log('connected'); }); socket.on('nack', function(data) { console.log(data); var error = OSDP.parse(data); $rootScope.$broadcast('nack', error); }); return socket; } }());

Angularjs $broadcast到当前作用域 序言,我有一个通过网络套接字连接到节点服务器的离子应用程序,节点服务器通过TCP套接字连接到C++应用程序。我有一个服务,它连接并为套接字提供服务,但也监视nack响应,以便它可以发出警报,通知用户错误: (function(){ 'use strict'; angular.module('tacoCorp.services') .factory('Socket', Socket); Socket.$inject = ['socketFactory', 'OSDP', '$rootScope']; function Socket(socketFactory, OSDP, $rootScope) { var socket = io('localhost:3000'); socket = socketFactory({ioSocket: socket}); socket.on('connect', function() { console.log('connected'); }); socket.on('nack', function(data) { console.log(data); var error = OSDP.parse(data); $rootScope.$broadcast('nack', error); }); return socket; } }());,angularjs,ionic-framework,Angularjs,Ionic Framework,我在每个控制器中都有此功能,以便它可以发出弹出窗口: $scope.$on('nack', function(e, err) { console.log(err); var alertPopup = $ionicPopup.alert({ title: 'Error', template: err.error }); }); 我的问题是,即使每个状态/视图只有一个控制器,它也会多次触发。几乎

我在每个控制器中都有此功能,以便它可以发出弹出窗口:

$scope.$on('nack', function(e, err) {
        console.log(err);
        var alertPopup = $ionicPopup.alert({
            title: 'Error',
            template: err.error
        });
    });
我的问题是,即使每个状态/视图只有一个控制器,它也会多次触发。几乎就好像
$destroy
没有发生或者没有删除侦听器一样。如果我这样做,仍然会发生:

var nackListener = $scope.$on('nack', function(e, err) {
        console.log(e);
        var alertPopup = $ionicPopup.alert({
            title: 'Error',
            template: err.error
        });
    });

    $scope.$on('$destroy', nackListener);
我不确定处理此问题的最佳方法是什么。

正如所指出的
$ionicConfigProvider.views.maxCache(0)
修复了此问题,而状态上的
cache:false
没有。您也可以这样做:

$scope.$on("$ionicView.afterLeave", function () {
        $ionicHistory.clearCache();
    });

对我来说,最好的方法就是选择一个控制器来安装它,然后使用它。

创建另一个函数,在$destroy上调用该函数,该函数将控制台输出一条测试消息,并调用您的cancel函数。这将告诉您您的控制器至少已被破坏。请更改此处讨论的缓存策略。或者钩住IONIC触发的事件,这是缓存@RadimKöhler的一个解决方法。我可以看到有
$ionicView.Left
,但是如何在不销毁的情况下删除侦听器?你所要做的就是将函数传递给
$scope.$on('$ionicView.Left')
,然后Angle神奇地删除侦听器?我会说,您只需从缓存视图中删除它。例如:
$scope.$on(“$ionicView.leave”,nackListener)
。。。。这不是神奇的。根本没有魔法。这是关于这样一个事实:1)当触发事件$ionicView.leave时-2)调用REMOVE方法nackListener 3)因为nackListener是REMOVE WATCH方法的引用。。。没有魔法