2014-12-19 97 views
0

我有一些角度應用程序,這非常簡單。我把所有東西都放到一個控制器中,但是我想把它分成多個控制器,所以每個控制器都應該做屬於它的動作,在一個控制器中沒有很多不同功能的不同含義。如何用角度縮放控制器

下面是一個代碼:

var videoApp = angular.module('videoApp', ['videoAppFilters', 'ui.unique', 'angularUtils.directives.dirPagination']); 

videoApp.controller('VideoListCtrl', function ($scope, $http, $filter) { 

    $scope.getFilteredResults = function (category, data, callback) { 
     callback = callback ||$filter('articleFilter'); 
     $scope.videos = callback(category, data); 
     return $scope.videos; 
    }; 

    $scope.setPageSize = function (pageSize) { 
     $scope.pageSize = pageSize; 
     return $scope.pageSize; 
    }; 

    $scope.addFavorite = function (data, key) { 
     localStorage.setItem(key, data); 
     $scope.getFilteredResults(data, $scope.allData); 
     return alert(key + " "+ data + " was added to your favorite list."); 
    }; 

    $scope.addSelectedClass = function (event) { 
     if($(event.target).hasClass("selected") == true) 
     { 
      $(event.target).removeClass("selected"); 
     } else { 
      $(".selected").removeClass("selected"); 
      $(event.target).addClass("selected"); 
     } 
    }; 

    $scope.formatDate = function (dateString) { 
     var date = new Date(parseInt(dateString)); 
     return date.toDateString(); 
    }; 

    $scope.cacheLoad = function (url, allowCache) { 
     if(allowCache == false || localStorage.getItem(url) && (parseInt(localStorage.getItem(url + 'time')) + 20000) < (new Date().getTime()) || (!localStorage.getItem(url))) { 
      $http.get(url).success(function (data) { 

       $scope.allData = data; 
       $scope.videos = data; 

       if(localStorage.getItem('category')) { 
        $scope.videos = $scope.getFilteredResults(localStorage.getItem('category'), $scope.allData); 
       } else { 
        $scope.videos = data; 
       } 

       $scope.categories = $filter('categoryFilter')(data); 

       if(allowCache == true && parseInt(localStorage.getItem(url + 'time')) + 20000 < (new Date().getTime())) { 
        localStorage.setItem(url, JSON.stringify(data)); 
        localStorage.setItem(url + 'time', new Date().getTime()); 
       } 

      }); 
     } else { 
      $scope.allData = JSON.parse(localStorage.getItem(url)); 
      $scope.videos = JSON.parse(localStorage.getItem(url)); 
      $scope.categories = $filter('categoryFilter')(JSON.parse(localStorage.getItem(url))); 
     } 
    }; 

    $scope.pageSize = 12; 
    $scope.cacheLoad('http://academy.tutoky.com/api/json.php', true); 
}); 

那麼,如何將這種分成多個控制器,以及如何在它們之間傳遞數據?

回答

1

你可能分裂的東西伸到服務,例如以下項目可能是在你的代碼中的服務,你那麼的依賴注入到控制器中:

  • 緩存邏輯,這通常是你會想要重複使用,因此成爲服務是有道理的。

您可能還需要進行以下項目的過濾器或指令:

  • $ scope.formatDate - 而不是打電話要格式化的日期此功能,每次,這將是更容易您的HTML調用{{ date | formatDate }}<div formatDate>{{ date }}</div>

你也許可以剝離出的pageSize太多,但它取決於你想要的精細程度去。

+0

好點。我有多個自定義過濾器,但不知何故,我沒有意識到這可能是另一個:D好吧,所以Cachce邏輯應該是一個服務,但像addFavorite等「事件處理程序」呢?他們是否應該留在這個控制器中,還是有更好的空間? – 2014-12-19 10:09:18

+0

這取決於你的應用程序,如果你只是有收藏視頻,那麼在視頻控制器中,如果用戶可以喜歡評論,視頻作者等喜歡的東西等是有道理的。那麼它是有道理的提供更通用的服務。 – Varedis 2014-12-19 10:12:29

+0

在這種情況下,它的唯一視頻,就像學習新東西一樣。但是我想要得到關於項目設計權的那種想法。 – 2014-12-19 10:14:47