0

我想在我的角度服务中使用“self.port.emit”从UI发送附加结果。问题是我没有得到任何错误,所以我不知道为什么面板没有检测到self.port。实现AngularJS的Firefox扩展

下面是我当前文件夹结构:

add-on/ 
    lib/ 
     toolbar.js 
    data/ 
     angularApp/ 
      app/ 
      scripts/ 
       controllers/ 
        groupCtrl.js 
       services/ 
        groupservice.js 

在我gorupservice.js我有以下代码:

angular.module('angularApp').service('groupservice'), function() { 
    this.addGroup = function(name) { 
     self.port.emit("newGroupName", name); 
    } 
} 

的groupservice由groupCtrl.js调用。函数addGroup被调用。在toolbar.js中,我有一个“self.port.on”正在监听“newGroupName”。在toolbar.js,我有

function createSettingsPanel() { 
    var settingsPanel = require("sdk/panel").Panel({ 
     ... 
     contentScriptFile: [data.url("angularApp/app/bower_components/angular/angular.js"), 
     data.url("angularApp/app/scripts/app.js"), 
     data.url("angularApp/app/scripts/controllers/groupservice.js")], 
    }); 

    settingsPanel.port.on("newGroupName", function() { 
     console.log("MADE IT"); //NOT GETTING HERE! 
    }); 
} 

如果有人在一个Firefox angular.js附加任何经验,帮助将不胜感激。

回答

0

这是一个在黑暗中拍摄,但应此代码:

angular.module('angularApp').service('groupservice', function() { 
    this.addGroup = function(name) { 
     self.port.on("newGroupName", name); 
    } 
} 

angular.module('angularApp').factory('groupService', function() { 
    var groupService; 

    groupService.addGroup = function(name) { 
     self.port.emit("newGroupName", name); 
    } 

    return groupService; 
} 

你找单身吧?

有些问题:“自我”是一个全局变量吗?注入服务时是否定义了self.port

+0

self本质上是一个用于在附加组件和内容脚本之间进行通信的变量。要发送消息,使用self.port.emit并接收消息use self.port.on. – CodeMinion

+0

对我的代码所做的更改会产生什么影响?猜猜你正在寻找一个发出事件的单身人士,而不是接收事件? – pocesar

+0

你的代码和之前一样。仍然没有错误。 – CodeMinion

1

在内容脚本(角应用程序)中使用addon.port.emit而不是self.port.emit,它的工作原理。

+0

是的,这是行得通的。 – sintetico82