草庐IT

javascript - AngularJS Restful 路由

coder 2024-07-19 原文

我正在尝试使用 Restful/Ruby 约定构建我的应用程序 /<resource>/[method]/[id] .我以前在使用像 CodeIgniter 这样的服务器端 MVC 框架时是如何根据 URI 动态路由的:

例如

www.foo.com/bar/baz/1

然后该应用程序将使用方法 baz在 Controller /类中 bar并返回 views/bar/baz.php (填充了来自 bar->baz 的数据)

我想在 Angular 中做同样的事情,但我不确定它是否支持这个(如果支持,我不确定具体如何去做)。目前我正在使用 $routeProviderwhen指定每个案例的方法。 $location.path()看起来它可能有我需要的东西,但我认为我不能在 app.js 中使用它(在 config() 内)。

我想做的是这样的:

.config([
  '$routeProvider', function($routeProvider) {
    $routeProvider
    .when(//<resource> controller exists
      resource+'/'+method, {
        "templateURL": "views/" + resource + "/" + method + ".html",
        "controller":  resource
      }
    ).otherwise({ "redirectTo":"/error" });
  }
]);

路由器会自动调用合适的方法。

编辑 另外,为什么 $routeProvider当我指定 when('/foo/bar', {…}) 时吓坏了?

EDIT 2 根据 Lee 的建议,我正在考虑做这样的事情:

$routeProvider
  .when(
    '/:resource/:method/:id', {
      "templateUrl": function(routeParams){
        var path = 'views/'+routeParams.resource+'/';
        return ( typeof routeParams.method === 'undefined' ) ?
          path+'index.html' : path+routeParams.method+'.html';
      },
      "controller": RESOURCE
  })
  .otherwise({redirectTo: '/error'});

我在 $routeProvider 中注意到以下内容的文档:

templateUrl – {string=|function()=} – path or function that returns a path to an html template that should be used by ngView.

If templateUrl is a function, it will be called with the following parameters:

• {Array.<Object>} - route parameters extracted from the current $location.path() by applying the current route

编辑:选项设置templateUrl一个功能是不稳定的一部分1.1.2构建:#1963 (但从 2013 年 2 月 7 日开始不起作用)。

在 AngularJS 的 Github 上有关于添加此功能的讨论:#1193 #1524 , 但我不知道它是否真的实现了(在上面引用的 Dash 的文档中,它看起来已经实现了,而且网站上的文档还没有更新)。

EDIT 3 为了阐明我想要发生的事情(根据 lee 的要求),用最简单的话来说,我想去 www.foo.com/index.html#/people

Angular 应该使用 Controller people , 自动调用其 index方法,应该服务

./views/people/index.html
./views/people/map.html

此外,如果我转到 www.foo.com/index.html#/people/map

Angular 应该使用 people Controller ,但这次自动调用它的 map方法并提供 ...map.html(因为 map 是在 url 中指定的)

./views/people/index.html
./views/people/map.html

那么,如果我去

www.foo.com/index.html#/widgets

Angular 应该服务

./views/widgets/index.html
./views/widgets/details.html

路由器的代码应该非常通用——我不应该指定 .when()对于每条路线。

最佳答案

再考虑一下。对于那些通用的 CRUD/REST 类型操作,您可以只使用一个 Controller 。然后使用资源和 View 参数加载模板。

  • 创建
    • #/foo/create/0
    • 它有自己的表单模板“/views/foo/create.html”,0 os 只是一个占位符。
    • 在提交时,您将在 Controller 上调用一个方法 ng-click="save()",该方法将通过 POST "/rest/foo"发送到服务器。
  • 阅读
    • #/foo/view/1
    • 同样,模板“/views/foo/view.html”只是数据 View
    • 您可以使用 GET "/rest/foo/1"调用服务方法从您的服务器获取数据
  • 更新 -#/foo/编辑/1
    • 可以使用与创建相同的模板,也可以根据需要使用不同的“/views/foo/edit.html”。
    • 同时使用 GET "/rest/foo/1"拉取数据
    • 使用 PUT "/rest/foo/1"提交数据
  • 删除
    • #/foo/删除/1
    • 服务方法会调用 DELETE "/rest/foo/1"
    • 我认为您不需要为此使用散列,但您可以使用散列,因为 Controller 实际上可以进行验证或任何您喜欢的操作来确认删除。也许有一个名为“/views/foo/delete.html”的 View 询问您是否要删除记录。然后你可以在某处的按钮上设置 ng-click="delete(itemid)"通过 ajax 删除项目。

所有这些都可以使用单个 Controller /服务并动态生成服务和 View url 来完成。

任何自定义的内容都需要自定义 Controller 以及自定义路由和服务方法。我可能可以举一个例子,但不是今晚。

关于javascript - AngularJS Restful 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14717183/

有关javascript - AngularJS Restful 路由的更多相关文章

  1. ruby-on-rails - Rails 3 中的多个路由文件 - 2

    Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题

  2. ruby - rails 3 redirect_to 将参数传递给命名路由 - 2

    我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use

  3. ruby-on-rails - Rails 3,嵌套资源,没有路由匹配 [PUT] - 2

    我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle

  4. ruby-on-rails - Rails - 从命名路由中提取 HTTP 动词 - 2

    Rails中有没有一种方法可以提取与路由关联的HTTP动词?例如,给定这样的路线:将“users”匹配到:“users#show”,通过:[:get,:post]我能实现这样的目标吗?users_path.respond_to?(:get)(显然#respond_to不是正确的方法)我最接近的是通过执行以下操作,但它似乎并不令人满意。Rails.application.routes.routes.named_routes["users"].constraints[:request_method]#=>/^GET$/对于上下文,我有一个设置cookie然后执行redirect_to:ba

  5. ruby-on-rails - 如何在 Rails 中设置路由的默认格式? - 2

    路由有如下代码:resources:orders,only:[:create],defaults:{format:'json'}resources:users,only:[:create,:update],defaults:{format:'json'}resources:delivery_types,only:[:index],defaults:{format:'json'}resources:time_corrections,only:[:index],defaults:{format:'json'}是否可以使用1个字符串为所有资源设置默认格式,每行不带“默认值”散列?谢谢。

  6. ruby-on-rails - 使用 javascript 更改数据方法不会更改 ajax 调用用户的什么方法? - 2

    我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的

  7. ruby - cucumber 的路由问题 - 2

    我正在使用rails3和cucumber,除了这个小问题,一切都很顺利GivenIamonthe"editautomobile"pageNoroutematches{:controller=>"automobiles",:action=>"edit"}(ActionController::RoutingError)现在路径在paths.rb中设置为edit_automobile_path在routes.rb中我有汽车作为资源,我搭建了它所以请告诉我我遗漏了什么,清楚地定义了路线并且匹配,因为我运行了rake路线并看到了路线。请指出正确的方向 最佳答案

  8. ruby - Rails 路由 : Giving default values for path helpers - 2

    有什么方法可以为url/path助手提供默认值吗?我有一个可选范围环绕我的所有路线:#config/routes.rbFoo::Application.routes.drawdoscope"(:current_brand)",:constraints=>{:current_brand=>/(foo)|(bar)/}do#...allotherroutesgohereendend我希望用户能够使用这些URL访问网站:/foo/some-place/bar/some-place/some-place为了方便起见,我在我的ApplicationController中设置了一个@current

  9. ruby-on-rails - 将 Rails 路由助手作为类方法添加到类中 - 2

    我如何将像“root_path”这样的Rails路由助手作为类方法添加到像my_model.rb这样的类中?所以我的课是这样的:ClassMyModeldefself.fooreturnself.root_pathendendMyModel.foo以上不起作用,因为ClassMyModel不响应root_path这是我所知道的:我可以使用includeRails.application.routes.url_helpers,但这只会将模块的方法添加为实例方法我试过扩展Rails.application.routes.url_helpers但它没用请随时给我上课:)

  10. ruby - 在 Mechanize 中使用 JavaScript 单击链接 - 2

    我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan

随机推荐