2017-04-24 127 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'路由器? –