2013-04-28 6 views
1

У меня есть простая страница, отображающая список элементов. Данные извлекаются из файла JSON (URL-адрес предоставляется сервером).Угловая загрузка json-файла динамически onclick

Две вкладки позволяют отображать (onclick) «самые последние» или «популярные» элементы (снова данные каждой вкладки предоставляются через файл JSON). По умолчанию должны отображаться «самые последние» элементы.

Каков наилучший способ загрузки правого файла JSON onclick и отображения его содержимого.

Я думал о передаче URL-адресов в разметке (но я сомневаюсь, что это лучший способ сделать это). То, что я имел в виду:

HMTL

<ul> 
    <li jsrc="recentitems.json" urlgetter>Most recent</li> 
    <li jsrc="popularitems" urlgetter>Most popular</li> 
</ul> 

Plunker моего кода: http://plnkr.co/edit/glSz1qytmdZ9BQfGbmVo?p=preview

Любые предложения о том, как подойти к нему?

EDIT

Я немного изменив свой подход. Теперь я делаю один HTTP-запрос (надеюсь, и лучшая производительность?). В принципе, я хотел бы загрузить все элементы, потом фильтровать/сортировать их.

Расширение от вашего plunker: http://plnkr.co/edit/glSz1qytmdZ9BQfGbmVo?p=preview Я добавил «Дата» & «взгляды» атрибуты элемента объекта (см JSON).

  1. Вкладки - Как я мог фильтровать/сортировать элементы OnClick? «Недавние» будут отсортированы по дате, а «Популярный» будет отсортирован по точкам.
  2. Категории - Я использую ng-click для захвата значения категории, хотя не уверен, как динамически обновлять фильтр (используя значение, переданное onclick).

Благодаря

ответ

7

Один из способов сделать что-то вроде: -

Первый в HTML: -

<div ng-app="App"> 
     <div ng-controller="tabsCtrl"> 
     <ul> 
      <li ng-click="tab(1)">Recent items</li> 
      <li ng-click="tab(2)">Popular items</li> 
     </ul> 
     <ul> 
      <li ng-repeat='product in products'>{{product.Name}}</li> 
     </ul> 
     {{products || json}} 
     </div> 
    </div> 

и JS

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

app.factory('products', function ($http, $q) { 
     return { 
     items: function (url) { 
      //create our deferred object. 
      var deferred = $q.defer(); 

      //make the call. 
      $http.get(url).success(function (data) { 
       //when data is returned resolve the deferment. 
       deferred.resolve(data); 
      }).error(function() { 
       //or reject it if there's a problem. 
       deferred.reject(); 
      }); 

      //return the promise that work will be done. 
      return deferred.promise; 
     } 
     } 
    }); 

app.controller("tabsCtrl", function ($scope, products) { 
    $scope.products = products.items('/api/products'); 

    $scope.tab = function (tabIndex) { 
     if (tabIndex == 1) 
     $scope.products = products.items('/api/products'); 
     if (tabIndex == 2) 
     $scope.products = products.items('/api/popularproducts'); 
    }; 
}); 
+0

Извините за поздний ответ , Прежде всего, спасибо за ваш ответ. Я немного изменил свой подход после второй мысли. Моя первоначальная идея заключалась в том, чтобы получить один JSON-файл с сервера для каждой вкладки (самый последний и самый популярный), но поскольку угловой фильтр кажется довольно мощным, я бы хотел его использовать. У меня есть еще несколько вопросов - надеюсь, что все в порядке. См. Мой ** EDIT **; также добавил некоторые комментарии к моему обновленному плункеру http://plnkr.co/edit/glSz1qytmdZ9BQfGbmVo?p=preview – John

+0

Urm, на самом деле ответ - именно то, что вы изначально просили. Действительно, вы должны задать другой вопрос для своих изменений, поскольку он сильно изменился. Мне жаль, что вы не вознаградили мои усилия. Желаю вам удачи – Rippo

+0

Нет проблем. Я подумал, что это нормально, потому что это связано, но тогда я задам новый вопрос. Большое спасибо. – John