2014-12-28 49 views
0

我想將我的RoR網頁中的一個轉換爲Angular,以決定是否要將我的所有前端遷移到Angular。Rails to Angular Migration - 加載標籤動態

我遇到的問題是路由 - 看來由rails配置的路由總是「劫持」請求,所以整個佈局再次加載,而不是僅僅將模板加載到ng-view div中。

我嘗試了幾篇關於這種遷移類型的文章,但是這些文章或者討論一個全新的環境(對我來說不是這樣),相互矛盾(或者只是使用非常不同的編碼風格,這很令人困惑) ,或者在完成所有事情之前簡單地結束。

我到目前爲止有:

主角度文件

@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' } 
     }) 
    ]) 

的推進器本身(目前沒什麼好說的存在):

@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」語句,但是這無關緊要,因爲我不是問的API Angular和Rails(還:))之間的調用,而是動態模板加載。

Rails佈局在html標籤中配置了ng-app,我在ng-view div之後立即產生內容。

任何線索?我顯然錯過了一些重要的東西。

回答

0

如果您在模板中調用<%= yield %>,則rails將從相應文件(在此例中爲/app/views/dashboard/promote.html.haml)提供html。由於您希望提供該內容,因此您的模板中不應包含<%= yield %>,而只能包含ng-view。這種方式rails將提供佈局html和angular可以處理每個頁面。

+0

這是否意味着我應該刪除導軌路線?還是需要?不確定整個機制如何工作。 – CodeBender

+0

不,你需要的路線,否則你會得到一個404。基本上你想服務於相同的角頁面,無論路線,如果它是一個HTML請求。 – ptd