2017-04-24 125 views
1

我在我的express.js路由文件中有一個json對象,並且爲了解析它,我猜測最好的方法是發送給我的角度爲controller的環。ExpressJS + AngularJS:溝通路由和控制器

路由/ myaccount.js

router.post('/', function(req, res) { 
    // form submitted 
    var email = req.body.email 
    var password = req.body.password 
    login.returnSessionToken(email, password, (token) => { 
     console.log("return token: ", token) 
     var logged = require('../js/index') 
     logged.returnUserData(token, (myData) => { 
     res.render('myaccount', { myDataFromRoutes:myData }); 
     }) 

    }, 
    (fail) => {console.log(fail)}) 

}) 

controller.js

var controllers = angular.module('myApp.controllers', []); 

controllers.controller('IndexController', ['$scope', function($scope) { 
    $scope.data= myDataFromRoutes; //how do I get the JSON object from my routes and pass it here? 
}]); 

myaccount.html

<body ng-app="myApp"> 
    <div ng-controller="IndexController"> 
     <li ng-repeat="d in data"> 
      {{ d }} 
     </li> 
    </div> 
</body> 

結構是否正確?我無法想象如何使我的快速路線與我的角度控制器進行通信。

任何幫助將不勝感激。謝謝!

回答

1

由於您沒有使用$http來AJAX JSON對象,因此可以使用ngInit。這是ngInit爲數不多的預期用途之一。用玉或任何服務器模板引擎,你必須插JSON對象在ng-init指令:

<body ng-app="myApp"> 
    <div ng-controller="IndexController" ng-init="data = #{JSON.stringify(myDataFromRoutes)}"> 
     <li ng-repeat="d in data"> 
      {{d}} 
     </li> 
    </div> 
</body> 

因爲你是控制器的範圍內操作,數據變量也將在您的控制器$scope.data

另外,(可能更好,實際上),你可以插入直接在JavaScript中。但是,這對包含作爲文件的JS無效。它必須是一個內嵌腳本:

<script> 
    var controllers = angular.module('myApp.controllers', []); 
    controllers.controller('IndexController', ['$scope', function($scope) { 
    $scope.data= #{JSON.stringify(myDataFromRoutes)}; 
    }]); 
</script> 

注:最近帕格的版本更換了以下上面插語法:

ng-init="data = `${JSON.stringify(myDataFromRoutes)}`" 
+0

獲得'爭論「的IndexController」不是一個函數,出於某種原因沒有定義。另外,它是'myData'還是'myDataFromRoutes'? –

+0

您可能需要'.stringify()'JSON對象。您也可以直接插入控制器的js文件。 –

+0

獲取錯誤:'controller.js'上的myData未定義。它如何知道'myData'來自'express.js'路由器? –