【问题标题】:Rails to Angular Migration - Load tabs DynamicallyRails 到 Angular 迁移 - 动态加载选项卡
【发布时间】:2014-12-28 16:24:11
【问题描述】:

我正在尝试将我的一个 RoR 网页转换为 Angular,以确定是否要将我的所有前端迁移到 Angular。

我遇到的问题是路由 - 似乎由 rails 配置的路由总是“劫持”请求,因此再次加载整个布局,而不仅仅是将模板加载到 ng-view div 中。

我尝试关注一些关于此类迁移的帖子,但这些帖子要么讨论了一个全新的环境(对我来说不是这种情况),要么相互矛盾(或者只是使用非常不同的编码风格,这令人困惑),或者干脆在一切完成之前结束。

到目前为止我所拥有的:

主要的 Angular 文件

@dashboard = angular.module('dashboard',['dashboardServices','ngSanitize'],
  ['$routeProvider', '$locationProvider', ($routeProvider,
                                           $locationProvider) ->
    $locationProvider.html5Mode(true)
    $routeProvider.when('/', {
      templateUrl: "/app/views/dashboard/promote.html.haml",
      controller: 'PromoteCtrl'
    })
  ]).config(["$httpProvider", ($httpProvider) ->
    $httpProvider.defaults.headers.common['X-CSRF-Token'] =
      $('meta[name=csrf-token]').attr('content')
  ])


dashboardServices = angular.module('promoteServices', ['ngResource']).
  factory('PromoteInitData', ['$resource', ($resource) ->
      $resource('/dashboard-ng/promote-data.json', {}, {
        query: { method: 'GET', isArray: true }
        create: { method: 'POST' }
      })
    ])

Promote Controller 本身(目前真的什么都没有):

@PromoteCtrl = @dashboard.controller('PromoteCtrl', 
  ['$scope', '$location', 'PromoteInitData'], 
  $scope, $location, $resource, PromoteInitData) ->
  # Nothing at the moment

Rails 路线(应该删除?):

get '/dashboard/promote', :to => 'dashboard#promote', :as => 'promote'

将响应 API 请求的 Rails 控制器设置为“respond_to :json”,每个特定方法都返回一个适当的“respond_with”语句,但这无关紧要,因为我没有询问 Angular 和Rails (yet :) ) 而是动态模板加载。

Rails 布局在 html 标记中配置了 ng-app,我在 ng-view div 之后立即生成内容。

有什么线索吗?我显然错过了一些重要的东西。

【问题讨论】:

    标签: ruby-on-rails angularjs rails-routing angularjs-routing


    【解决方案1】:

    如果您的模板中有一个<%= yield %> 调用,rails 将从适当的文件(在本例中为/app/views/dashboard/promote.html.haml)提供html。由于您希望 Angular 提供该内容,因此您的模板中不应包含 <%= yield %>,而应仅包含 ng-view。这样,rails 将提供布局 html,并且 angular 可以处理每个页面。

    【讨论】:

    • 这是否意味着我也应该删除 rails 路线?还是需要?不确定整个机制是如何工作的。
    • 不,你需要路由,否则你会得到 404。基本上,如果它是一个 html 请求,无论路由如何,你都希望提供相同的角度页面。
    猜你喜欢
    • 2021-05-16
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    • 2018-02-09
    • 2019-09-17
    • 1970-01-01
    相关资源
    最近更新 更多