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