Javascript AngularJS:通过路由参数化控制器

Javascript AngularJS:通过路由参数化控制器,javascript,angularjs,ngroute,angularjs-ng-route,Javascript,Angularjs,Ngroute,Angularjs Ng Route,我对多个视图使用相同的控制器。我想根据所走的路线对控制器进行不同的参数化 视图基本上显示相同的角度ui网格,因此显示相同的控制器。然而,在一个视图中,我想对网格进行特定数据的预过滤,而在另一个视图中,我不想 我该怎么做 app.config(function ($routeProvider) { $routeProvider .when('/foo', { controller: 'Ctrl',

我对多个视图使用相同的控制器。我想根据所走的路线对控制器进行不同的参数化

视图基本上显示相同的角度ui网格,因此显示相同的控制器。然而,在一个视图中,我想对网格进行特定数据的预过滤,而在另一个视图中,我不想

我该怎么做

app.config(function ($routeProvider) {
    $routeProvider
        .when('/foo',
            {
                controller: 'Ctrl',
                templateUrl: '/foo.html',
            })
        .when('/bar',
            {
                controller: 'Ctrl',
                templateUrl: '/bar.html',
            });
});

app.controller('Ctrl', ['$scope' function ($scope) { .. }]);

在基本级别上,您可以检查模板以查看正在使用的模板,并将其分支

app.controller('Ctrl', function($route) {
  if ($route.current.templateUrl === '/foo.html') {
    doFoo();
  } else {
    doBar();
  }
});
只有在为每条路线使用不同的模板时,这才有效。如果您想重复使用相同的模板,则

app.config(function($routeProvider) {
  $routeProvider.when('/foo', {
    controller: 'Ctrl',
    templateUrl: '/foo.html'
    resolve: {
      whichRoute: function() { return 'foo'; }
    }
  });
});

app.controller('Ctrl', function(whichRoute) {
  if (whichRoute === 'foo') {
    doFoo();
  } else {
    doBar();
  }
});
甚至比这更好的是,
resolve
属性可以接受返回值或承诺的函数,因此您可以对其中的数据进行预筛选

app.config(function($routeProvider) {
  $routeProvide.when('/foo', {
    controller: 'Ctrl',
    templateUrl: '/foo.html',
    resolve: {
      dataToDisplay: function(YourDataService) {
        return YourDataService.getSomeData();
      }
    }
  });
});

app.controller('Ctrl', function(dataToDisplay) {
  doTheThing(dataToDisplay);
});
这样想吧。 两条路线都相同,只是一条有过滤器,另一条没有。因此,实际上,这是一条带有附加参数
filter='some'
的相同路线,因此您的配置可能如下所示:

app.config(function ($routeProvider) {
$routeProvider
    .when('/foo/:filter?',
        {
            controller: 'Ctrl',
            templateUrl: '/foo.html',
        })
});
控制器中有
$routeParams.filter
问号是可选参数。然后在
Ctrl
中,只需查找filter参数并使用filter进行适当渲染。 顺便说一句,您的视图可以保持不变,只需过滤网格即可。如果筛选器参数不存在,它将返回相同的数据(未筛选)


希望有帮助

你说的参数化是什么意思?把问题更新得更具体些。谢谢!这正是我想要的。这是正确的方法。另一个答案是哈克的角度。可选的查询参数是一种方法。