我有些困惑,我有一个模块可以路由到不同的控制器:
var mainModule = angular.module('lpConnect', []).
config(['$routeProvider', function ($routeProvider) {
$routeProvider.
when('/home', {template:'views/home.html', controller:HomeCtrl}).
when('/admin', {template:'views/admin.html', controller:AdminCtrl}).
when('/connect', {template:'views/fb_connect.html', controller:MainAppCtrl}).
otherwise({redirectTo:'/connect'});
}]);
还有一个常见的服务,如下:
mainModule.factory('Common', ['$rootScope', '$http', function (scope, http) {
var methods = {
changeLanguage:function (langID) {
http.get('JSON/langs/' + langID + '/captions.json').success(function (data) {
scope.lang = data;
});
},
initChat:function () {
console.log(scope); // full object
console.log(scope.settings); // undefined
}
};
//initiate
http.get('JSON/settings/settings.json').success(function (data) {
scope.settings = data;
methods.changeLanguage(scope.settings.lang);
});
return methods;
}]);
应用程序加载并通过XHR获取设置对象,我可以看到设置反映在我的DOM中(例如标题)。现在,当我从HomeCtrl调用initChat方法时,尝试访问scope.settings属性时会得到undefined值...奇怪的是,当我记录作用域时,我可以看到设置对象...我错过了什么吗?更新:我发现我做错的事情是直接从控制器主体调用我的方法。
function HomeCtrl($scope, $location, Common) {
...
Common.initChat()
...
}
如果把调用改为在点击时触发,一切都正常,但我确实需要在页面加载时运行这段代码。应该采取什么正确的方法?