首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$routeParams的滤波作用

$routeParams的滤波作用
EN

Stack Overflow用户
提问于 2013-11-27 23:56:36
回答 2查看 718关注 0票数 0

我正试图像Rails那样构造我的路线。我有一些类似于此的路径设置:

代码语言:javascript
复制
$routeProvider.when('/posts', {
  controller: 'PostsCtrl',
  templateUrl: '/views/posts.html'
});
$routeProvider.when('/posts/new', {
  controller: 'PostsCtrl',
  templateUrl: '/views/posts.html',
  doNew: true
});
$routeProvider.when('/posts/:postID', {
  controller: 'PostsCtrl',
  templateUrl: '/views/posts.html'
});
$routeProvider.when('/posts/:postID/edit', {
  controller: 'PostsCtrl',
  templateUrl: '/views/posts.html',
  doEdit: true
});

PostCtrl的底部有以下内容:

代码语言:javascript
复制
if ($routeParams.doNew) {
  console.log('action: new');
} else if ($routeParams.doEdit) {
  console.log('action: edit', $routeParams.postID);
} else if ($routeParams.libraryID) {
  console.log('action: show', $routeParams.postID);
} else {
  console.log('action: index');
}

action: show是在路径为/posts/new/posts/2/posts/2/edit时打印的。我可以过滤什么使控制器路由到适当的操作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-02 15:44:59

我想出了一种更简单的方法来实现Rails激发的动作。

确定路线:

代码语言:javascript
复制
$routeProvider.when('/posts', {
  templateUrl: '/views/posts/index.html',
  controller: 'PostsCtrl'
});
$routeProvider.when('/posts/new', {
  templateUrl: '/views/posts/index.html',
  controller: 'PostsCtrl',
  action: 'new'
});
$routeProvider.when('/posts/:postID', {
  templateUrl: '/views/posts/index.html',
  controller: 'PostsCtrl',
  action: 'show'
});
$routeProvider.when('/posts/:postID/edit', {
  templateUrl: '/views/posts/index.html',
  controller: 'PostsCtrl',
  action: 'edit'
});

然后为$routeChangeSuccess添加一个事件处理程序

代码语言:javascript
复制
app.run(['$rootScope', '$route', function ($rootScope, $route) {
  $rootScope.$on('$routeChangeSuccess', function (currentRoute, previousRoute) {
    if ($route.current.action) {
      $rootScope.action = $route.current.action;
    }
  });
}]);

然后在您的控制器中,您可以在$scope.action上进行分支。

代码语言:javascript
复制
if ($scope.action === 'new') {
  $scope.newPost();
} else if ($scope.action === 'show') {
  Post.get($routeParams.postID).then($scope.showPost);
} else if ($scope.action === 'edit') {
  Post.get($routeParams.postID).then($scope.editPosts);
}

正常情况下,我可能会为这些路径设置单独的控制器,但在我正在构建的应用程序上,newshowedit在所有"Posts“的索引上都显示在一个模态中。

票数 1
EN

Stack Overflow用户

发布于 2013-11-28 00:51:03

只要添加一个决心,就可以轻松地完成任务:

代码语言:javascript
复制
$routeProvider.when('/posts', {
  controller: 'PostsCtrl',
  templateUrl: '/views/posts.html'
  resolve: {
       action: function(){return 'list';}
  }
});
$routeProvider.when('/posts/new', {
  controller: 'PostsCtrl',
  templateUrl: '/views/posts.html'
  resolve: {
       action: function(){return 'new';}
  }
});

等等。

然后,只需将action注入控制器:

代码语言:javascript
复制
controller('PostCtrl', function($scope, action){
    if(action==='new'){
       console.log('new');
     }
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20255404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档