2014-09-02 105 views
0

我在想如何将多个.json文件加载到模板中。 在我的示例中,我有来自用户的提交内容,如果可能,我不想将所有内容都存储在一个json文件中。如何以角度加载多个json文件

如何从多个json文件中抓取一些数据?

这里是我的plunk example

我想加载users.json以及

var app = angular.module('myApp', []); 

app.directive('contentItem', function ($compile,$parse) { 

    templates = { 
     image: 'image.html', 
     event: 'event.html', 
     article: 'article.html', 
     ad: 'ad.html', 
     discount: 'discount.html', 
     video: 'video.html' 

    } 

    var linker = function(scope, element, attrs) { 
     scope.setUrl = function(){ 
      return templates[scope.content.content_type]; 
     } 

    } 

    return { 
     restrict: "E", 
     replace: true, 
     link: linker, 
     scope: { 
      content: '=' 
     }, 
     templateUrl: 'main.html' 
    }; 
}); 

function ContentCtrl($scope, $http) { 
    "use strict"; 

    $scope.url = 'content.json'; 
    $scope.content = []; 

    $scope.fetchContent = function() { 
     $http.get($scope.url).then(function(result){ 
      $scope.content = result.data; 
     }); 
    } 

    $scope.fetchContent(); 
} 

帮助表示赞赏

+0

你可以有一个http调用。你不希望出现这种情况? – V31 2014-09-02 06:46:47

+0

你能证明一下吗? – 2014-09-02 07:05:32

回答

0

可以为JSON请求无论是从控制器,如:

app.controller('myController', function($scope, $http){ 
    $scope.users = []; 
    $scope.getUsers = function() {   
      $http({method: 'JSONP', url: "users.json?query=?callback=JSON_CALLBACK&query="+ $scope.searchString}). 
       success(function(data, status) { 
       $scope.users = data; 
       }). 
       error(function(data, status) { 
       console.log(data || "Request failed"); 
      });  
}; 

和另一种方法(更好的方法)是使用角度工厂来获取JSON文件。

myApp.factory('getUsersFactory',['$http',function($http){ 
    return { 
    getUsers: function(callback){ 
     $http({method: 'JSONP', url: "users.json?query=?callback=JSON_CALLBACK&query="+ $scope.searchString}).success(callback); 
    } 
    } 
}]); 

现在,您可以将此工厂作为依赖项包含,并获取用户数据并将其分配到回调函数中。

+0

嗨,我一定是做错了什么......因为我无法加载JSON文件... 我也想继续现有的加载方法。 有没有办法像这样? 函数ContentCtrl($ scope,$ http){ “use strict”; $ scope.content = []; $ scope.users = []; $(scope.fetchContent = function(){ $ http.get('content.json')。then(function(result){ (功能(结果){0} {0};}}; $ http.get('users.json')。然后(功能(结果){ $ scope.users = result.data; }); } $ scope.fetchContent(); } – 2014-09-03 05:50:50

+0

是的,这也是可能的,但你不觉得单独的函数将是一个优势,保持代码segregation – V31 2014-09-03 06:26:09

+0

我不确定哪种方法会更好地执行。如果使用单独的函数更灵活,那么我很乐意使用工厂。 – 2014-09-03 06:46:31