/**
* @param {string} name Event name to listen on.
* @param {function(event)} listener Function to call when the event is emitted.
* @returns {function()} Returns a deregistration function for this listener.
*/
$on: function(name, listener) {
var namedListeners = this.$$listeners[name]
if (!namedListeners) {
this.$$listeners[name] = namedListeners = []
}
namedListeners.push(listener)
return function() {
namedListeners[indexOf(namedListeners, listener)] = null
}
},
你的情况,你需要返回函数
var offCallMeFn = $scope.$on("onViewUpdated", callMe)
//this will deregister that listener
offCallMeFn()
2.
编辑:这样做正确的方法是在@LiviuT的回答!
您可以随时延长角的范围,允许您删除这样的侦听器,如下所示:
//A little hack to add an $off() method to $scopes.
(function () {
var injector = angular.injector(['ng']),
rootScope = injector.get('$rootScope')
rootScope.constructor.prototype.$off = function(eventName, fn) {
if(this.$$listeners) {
var eventArr = this.$$listeners[eventName]
if(eventArr) {
for(var i = 0i <eventArr.lengthi++) {
if(eventArr[i] === fn) {
eventArr.splice(i, 1)
}
}
}
}
}
}())
下面是它如何工作的:
function myEvent() {
alert('test')
}
$scope.$on('test', myEvent)
$scope.$broadcast('test')
$scope.$off('test', myEvent)
$scope.$broadcast('test')
这里是它在行动plunker
3.
调试代码后,我创建了自己的函数就像“blesh”的回答。因此,这是我做的
MyModule = angular.module('FIT', [])
.run(function ($rootScope) {
// Custom $off function to un-register the listener.
$rootScope.$off = function (name, listener) {
var namedListeners = this.$$listeners[name]
if (namedListeners) {
// Loop through the array of named listeners and remove them from the array.
for (var i = 0i <namedListeners.lengthi++) {
if (namedListeners[i] === listener) {
return namedListeners.splice(i, 1)
}
}
}
}
})
所以通过将我的函数$ rootscope现在它是提供给我所有的控制器。
而在我的代码我做
$scope.$off("onViewUpdated", callMe)
谢谢
编辑:AngularJS方式做 CodeGo.net,这是@LiviuT的回答!但是,如果你想取消注册该侦听器在另一个范围,并在想远离创建本地变量来保持去登记注册函数引用。这是一个可能的解决方案。
4.
此代码工作
$rootScope.$$listeners.nameOfYourBind=[]
引入sockjs.js stomp.js
function connect() {
// 建立连接对象(还未发起连接)
var socket =new SockJS("http://192.168.0.167:8081/endpointWisely")
// 获取 STOMP 子协议的客户端对象
stompClient = Stomp.over(socket)
// 向服务器发起websocket连接并发送CONNECT帧
stompClient.connect({},
function (frame) {
// 连接成功时(服务器响应 CONNECTED 帧)的回调方法
console.log('已连接' + frame)
stompClient.subscribe("/topic/response",function (res) {
console.log(res.body)
})
},
// 连接失败时(服务器响应 ERROR 帧)的回调方法
function errorCallBack (error) {
console.log('连接失败' + error)
}
)
}