Rob*_*ler 1 javascript dependency-injection google-chrome-extension angularjs
我正在玩角度和它的DI.我也尝试使用promises范例,但是我遇到了一个相当奇怪的问题,在Chrome扩展中使用它.
以下代码非常有效.当调用"chromeStorageService"中的对象文字中的cb()时,将解决promise.但是,当我取消注释返回时chrome.storage.local;,代码停止工作.我无法理解为什么,因为console.log('going to be resolved');仍然被解雇,但成功警报不会.在此先感谢任何提示:)
https://developer.chrome.com/extensions/storage.html
'use strict';
var app = {};
app = angular.module('options', ['options.controllers']);
app.services = angular.module('options.services', []);
app.services.factory('chromeStorageService', function () {
//return chrome.storage.local;
return {
get: function(id, cb) {
cb();
}
}
});
app.services.factory('storageService', ['chromeStorageService', '$q', function (chromeStorage, $q) {
return new function () {
this.get = function (identifier) {
var defered = $q.defer();
chromeStorage.get(identifier, function (items) {
var error = false//chrome.runtime.lastError;
if (error) {
return defered.reject(error);
}
console.log('going to be resolved');
console.log(defered);
defered.resolve();
});
return defered.promise;
}
}
}]);
app.services.factory('fooService', ['storageService', function (testService) {
return new function () {
this.getAll = function () {
var promise = testService.get('foo');
console.log(promise);
promise.then(
function () {
alert('success');
}, function () {
aler('err');
}
);
}
}
}]);
app.directive('foo', ['fooService', function (fooService) {
return {
restrict:'A',
link:function (scope, elm, attrs, ctrl) {
fooService.getAll();
}
};
}]);
app.controllers = angular.module('options.controllers', ['options.services']);
Run Code Online (Sandbox Code Playgroud)
Angular有自己的小事件循环事物.当你.resolve承诺时,进入Angular的队列.仅当Angular清除其队列时才会发生填充.
通常的做法是:
$scope.$apply(function() {
promise.resolve(thing);
});
Run Code Online (Sandbox Code Playgroud)
当控制从你传递给它的函数返回到$ apply时,它会清除队列并且一切都很漂亮.在这种情况下,您可能需要将$ rootScope注入服务,以便您可以应用某些内容,因为AngularJS中的视图未更新.
你的存根工作,因为存根永远不会离开角度世界,所以你已经在一个将照顾队列的上下文中.使用chrome.storage.local时,不会从这样的上下文调用回调.
| 归档时间: |
|
| 查看次数: |
5434 次 |
| 最近记录: |