ExpressJS + AngularJS:沟通路由和控制器

时间:2017-04-24 19:40:15

标签: angularjs node.js express

我的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>

结构对吗?我无法想象如何使我的快速路线与我的角度控制器进行通信。

任何帮助将不胜感激。谢谢!

1 个答案:

答案 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)}`"