在.run中的AngularJS应用程序启动期间将数据附加到页面$ scope

时间:2015-10-13 20:29:33

标签: angularjs

我在.run中动态创建我的路线:

.run(function($http, $rootScope) {
var mainInfo = null;
$http.get('thegoods.json').success(function(data) {
    $rootScope.HomeGateway = data.HomeGateway;
    var pages = $.merge($rootScope.HomeGateway.questions, $rootScope.HomeGateway.messages);
    for (var i = 0; i < pages.length; i++) {
        $routeProviderReference.when(pages[i].url, {
            templateUrl: pages[i].view,
            controller: pages[i].controller,
            data: pages[i].data
        })
    }
});

如何访问数据(定义为数据:上面的pages [i] .data)。请注意,我不确定这是否完全正确 - 但它应该作为我想要完成的事情的演示。

基本上,我抓住一个JSON文件并将其存储在$ rootScope中。然后我使用$ rootScope动态创建所有URL。 (如果您有兴趣自己这样做,请参阅http://blog.brunoscopelliti.com/how-to-defer-route-definition-in-an-angularjs-web-app/)我希望能够访问特定于某些页面的数据,而无需再次搜索JSON数据。我知道这是一个廉价的操作,但如果可能的话,我想以正确的方式做到这一点。

另一种表达我的问题的方法是..如何在应用首次启动时定义.run的每个页面$ scope?

1 个答案:

答案 0 :(得分:0)

如果所有内容都是article, you share中写的,并且我正确理解了您想要的内容,那么您应该使用resolve函数的.when选项$routeProviderReference.when(pages[i].url, { templateUrl: pages[i].view, controller: pages[i].controller, resolve: { data: function(){ return pages[i].data; } } }); }。并写如:

function QuestionController($scope, data) {
    $scope.data = data.someProp;
}

然后在控制器中:

{
JOBS: [
{
symbol: "JOBS",
timestamp: "2013-10-01T00:00:00-04:00",
tradingDay: "2013-10-01",
open: 36.65,
high: 40,
low: 34.34,
close: 38.95,
volume: 56687,
openInterest: null
},
{
symbol: "JOBS",
timestamp: "2014-01-01T00:00:00-05:00",
tradingDay: "2014-01-01",
open: 38.585,
high: 43,
low: 34.57,
close: 35.625,
volume: 89786,
openInterest: null
} 
...