如何在具有基于路径的不同变量的angularjs中重用控制器

时间:2013-07-18 07:11:21

标签: javascript angularjs

我需要加载Web服务。我喜欢显示,排序和过滤表的角度方式,以及我构建的工作效果很好。现在我试图扩展这个:基于所选的链接,我想以相同的方式显示不同的数据,但是来自同一个Web服务。我试图不重复代码,所以我试图重用控制器,现在我很困惑。这意味着我想要

  • 显示不同的部分/模板网址。
  • 加载不同的url参数。
  • 在返回JSON后映射一些内容。

解决我到目前为止认为配置更多变化的最佳方法是什么?我开始路由到变量(when('/change-requests/:businessUnit'),然后使用它来加载不同的值。但是,我如何更改模板网址?另一方面,如果我只是添加路由并加载不同的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;
                    }
                });
        }

如果我没有意义,我会尽力澄清。

1 个答案:

答案 0 :(得分:5)

如果要使用重用控制器名称,则应使用带有路由的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 ;
       }