簡體   English   中英

如何基於路由在具有不同變量的angularjs中重用控制器

[英]How to reuse a controller in angularjs with different variables based on route

我需要加載Web服務。 我喜歡顯示,排序和過濾表格的角度方式,並且我制作的內容效果很好。 現在,我嘗試擴展它:基於所選的鏈接,我想以相同的方式顯示來自同一Web服務的不同數據。 我試圖不重復代碼,所以我試圖重用控制器,現在我很困惑。 這意味着我要

  • 顯示不同的部分/模板網址。
  • 加載不同的網址參數。
  • 在返回JSON之后映射一些內容。

解決到目前為止我認為在配置中進行更多更改的最佳方法是什么? 我首先路由到一個變量( when('/change-requests/:businessUnit' ),然后使用該變量加載不同的值。但是,如何更改模板的url呢;另一方面,如果我只是添加路由並加載不同的URL模板(重用控制器),如何在ajax調用中加載不同的url?我對Angular不太熟悉,所以也許我在錯誤的樹上咆哮...

這是我原始代碼的相關部分。 還有更多的東西,但是沒有任何改變。 我在其中添加了一些內聯注釋,您將在其中找到要更改的部分,具體取決於所選的鏈接。

HTML:

<div ng-view></div>

路由器:

  $routeProvider.when('/change-requests/business-solutions', {
                    //this template will be different
                    templateUrl: 'js/modules/changeRequests/partials/business-solutions.html',
                    controller: ChangeRequestCtrl
                })

(部分)控制器:

        function ChangeRequestCtrl($scope, $location) {

                $scope.loaded = false;
                $.ajax({
                    //this url will be different
                    url: url,
                    success: function(json) {
                        $scope.$apply(function() {
                            $scope.changes = json.map(function(row) {
                                //this array map will be different
                                return row;
                            });
                            $scope.loaded = true;
                        });
                    },
                    error: function() {
                        $scope.error = true;
                    }
                });
        }

如果我沒有道理,我會嘗試澄清。

如果要使用重用控制器名稱,則應在路由中使用resolve屬性,並在控制器中使用resolve屬性

 $routeProvider.when('/change-requests/business-solutions', {
                    //this template will be different
                    templateUrl: 'js/modules/changeRequests/partials/business-solutions.html',
                    controller: ChangeRequestCtrl, resolve: {
            resolvedprop: ['$route', '$q', function ($route, $q) {
               var apiObject = {url: 'abc.com' };                      
               return apiObject     
                     }],
        }
                })


     function ChangeRequestCtrl($scope, $location,resolvedprop) {
       url = resolvedprop.url ;
       }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM