2014-07-18 81 views
0

我在我的Angular應用程序中使用$routeProvider進行路由。而對於2條路線,我使用相同的HTML模板和相同的控制器。AngularJS。使用不同的數據初始化控制器

 when('/products, { 
      templateUrl: 'views/products.html', 
      controller: 'ProductListCtrl' 
     }). 
     when('/myProducts', { 
      templateUrl: 'views/products.html', 
      controller: 'ProductListCtrl' 
     }). 

只有我想顯示的數據不同。即爲路徑products我想AJAX請求myserver:8080/products和爲路徑myProducts我想從AJAX請求加載數據到myserver:8080/products/my

現在我使用$location服務區分當前頁面(productsmyProducts)並加載適當的數據。

有沒有一些更優雅的方式來做到這一點?例如使用resolve方法$routeProvider

回答

2

重用控制器名稱中的最佳方式今天的場景是使用$ routeparams進行解析。

您可以修改代碼如下

when('/products, { 
       templateUrl: 'views/products.html', 
       controller: 'ProductListCtrl', 
    resolve: { 
      product: function($http) { 
       return $http.get('/products') 
      }, 
       needToShowFilter:function($q){ 
       var showfilter = $q.defer(); 
        showfilter.resolve(false); 
       return showfilter.promise 
      } 
      } 
      }). 
      when('/myProducts', { 
       templateUrl: 'views/products.html', 
       controller: 'ProductListCtrl', 
    resolve: { 
      product: function($http) { 
       return $http.get('/products/my') 
      }, 
      needToShowFilter:function($q){ 
       var showfilter = $q.defer(); 
        showfilter.resolve(true); 
       return showfilter.promise 
      } 
      } 
      }). 

然後在你的控制器,你可以注入到產品的控制器代碼。

+0

謝謝。但是我也可以注入更多的變量嗎?例如,我也想變量'needToShowFilter',如果它的'products'那麼這個變量應該是'true' othervise'false' – MyTitle

+0

你可以在路由中創建額外的resolve屬性,就像我上面創建的那樣,然後你可以注入相同的進入控制器 –

0

嘗試添加$路線在你的控制器,並記錄

$route.current 

,看看你有什麼裏面,我認爲是的方式來獲取信息

相關問題