我的json
路由文件中有一个express.js
对象,为了解析它,我猜最好的方法是发送给我的Angular controller
来循环在我看来。
路由/ 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>
结构对吗?我无法想象如何使我的快速路线与我的角度控制器进行通信。
任何帮助将不胜感激。谢谢!
答案 0 :(得分:1)
由于您没有将$http
用于AJAX JSON对象,因此可以使用ngInit
。这是ngInit
为数不多的预期用途之一。使用Jade或您拥有的任何服务器模板引擎在ng-init
指令中插入JSON对象:
<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>
注意:最新版本的Pug已将以上插值语法替换为以下内容:
ng-init="data = `${JSON.stringify(myDataFromRoutes)}`"