【问题标题】:AngularJS - Get data by IDAngularJS - 按 ID 获取数据
【发布时间】:2012-12-16 04:12:05
【问题描述】:

我遇到了以下情况:
我得到了一些自定义标记和静态(非谷歌)地图。我使用以下代码显示(和过滤)标记:

<div ng-controller="DealerDetailsListCtrl">
    <a ng-click="showdetails=!showdetails" href="#/dealer/{{marker.id}}" class="marker" style="left:{{marker.left}};top:{{marker.top}}" ng-repeat="marker in dealer|zipFilter:zipCodeLookup:countryLookup"></a>
</div>  

我将它路由到成功显示 ID 的“dealer-details.html”:

  <div class="alldealermodal" ng-controller="DealerDetailsCtrl">      
    <div ng-view></div>
  </div>  

使用此控制器/路由:

app.config(['$routeProvider', function($routeProvider) {
  $routeProvider.
      when('/dealer/:id', {templateUrl: 'files/tpl/dealer-details.html', controller: DealerDetailsCtrl}).
      otherwise({redirectTo: '/'});
}]);  

function DealerDetailsCtrl($scope, $routeParams) {
  $scope.id = $routeParams.id;
}  

由于我对 angularJS 很陌生,我想知道,如何通过 ID 获取所有数据。

我的 json 文件如下所示:

[
{
    "id": "2",

    "name": "Laden Dortmund",
    "strasse": "Unionstr.",
    "hausnr": 1,
    "plz": "45525",
    "stadt": "Dortmund",
    "land": "DE",
    "url": "http://www.google.de",
    "tel": "0234-234568",
    "email": "lade@indortmund.de",
    "left": "200px",
    "top": "300px",
    "lowRange":60000,
    "highRange":70000
},
{
    "id": "1",
    "name": "Laden Unna",
    "strasse": "Berlinerstr.",
    "hausnr": 134,
    "plz": "78654",
    "stadt": "Unna",
    "land": "AT",
    "url": "http://www.bing.de",
    "tel": "0234-11223344",
    "email": "lade@inunna.de",
    "left": "250px",
    "top": "500px",
    "lowRange":40000,
    "highRange":50000
}
]

等等....我想从所选ID中获取所有数据。我怎样才能做到这一点?有人能给我一个提示吗?

我使用这个控制器从 json 中获取所有数据:

function DealerListCtrl($scope, $http) {
  $scope.dealer = [];
  $http.get('files/js/dealer.json').success(function(data) {
    $scope.dealerall = data;
  });
  $scope.orderProp = 'id';
}

【问题讨论】:

  • 只需在函数中遍历数组并返回具有正确 id 的对象?

标签: controller get routes angularjs


【解决方案1】:

首先,您不需要在dealer-details.html 中设置ng-controller="DealerDetailsCtrl",因为ng-view 会处理这个问题。

其次,您应该提供service 来检索您的数据:

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

app.factory('dealerService', function($http) {
   return {
      getDealerList function() {
         var dealers = {
            list : []
         };
         // TODO add possible caching via $cacheFactory
         $http.get('files/js/dealer.json').success(function(data) {
            dealers.list = data;
         });
         return dealers;
      },

      // other functions
   };

});

在您需要访问经销商的控制器中,只需注入 DealerService,就像您需要其他服务一样。要获取特定条目,只需迭代即可。

另一种可能性是使用$routeProvider 上的resolve 属性将经销商数据发送到DetailController。

【讨论】:

  • 这不行,是我做错了吗?得到错误:ncaught SyntaxError: Unexpected token function line 5
  • 遇到了另一个问题(抱歉,对 angularjs 来说非常新)...这是正确的吗? pastebin.com/gTHs0vNy - 它给了我这个错误:ReferenceError: 经销商未定义
  • 你是在引用一个函数,而不是在执行它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-26
相关资源
最近更新 更多