【发布时间】:2013-11-02 00:54:56
【问题描述】:
我正在尝试使用 angularjs 开发一个 chrome 扩展,当我尝试使用活动选项卡的 url 初始化 $scope 时出现奇怪的行为。
这里是我的控制器的代码:
var app = angular.module('app', ['app.service']);
app.controller('ItemCtrl', function ($scope, chromeHelper) {
$scope.website = "No result!";
// Does not work until I click on something :-/
chromeHelper.getActiveTabDomain(function (domain) {$scope.website = domain; });
});
因此,当我尝试直接初始化 $scope.website 成员时,它不会成功,但是当我点击按钮之后,$scope.website 就会更新。
我真的不明白为什么。
这是我的 Chromehelper 服务的代码:
var service = angular.module('app.service', []);
service.factory('chromeHelper', function() {
var chromeHelper = {};
chromeHelper.getActiveTabDomain = function (callback){
chrome.tabs.query({'active': true}, function(tabs){
if(tabs && tabs.length > 0) callback(getDomainFrom(tabs[0].url));
});
};
return chromeHelper;
});
function getDomainFrom(url) {
return url.match(/:\/\/(.[^/]+)/)[1];
}
非常感谢您!
【问题讨论】:
-
好的,我通过在回调结束时调用 $scope.$apply() 来解决我的问题。
-
更简洁的方法是这样做:$scope.$apply(function(){$scope.selectedItem.website = domain});
标签: angularjs google-chrome-extension