Tengo un objeto json en mi archivo de rutas express.js y para analizarlo, supongo que la mejor manera sería enviarlo a mi controller Angular para que se repita en mi vista.
rutas/micuenta.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)}) })controlador.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? }]);micuenta.html
<body ng-app="myApp"> <div ng-controller="IndexController"> <li ng-repeat="d in data"> {{ d }} </li> </div> </body>¿Es correcta la estructura? No puedo entender cómo hacer que mis rutas expresas se comuniquen con mi controlador angular.
Cualquier ayuda será muy apreciada. ¡Gracias!
Como no está usando $http para AJAX el objeto JSON, puede usar ngInit . Este es uno de los pocos usos previstos de ngInit . Use Jade o cualquier motor de plantilla de servidor que tenga para interpolar el objeto JSON en la directiva 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> Dado que está operando dentro del alcance del controlador, la variable de datos también estará disponible en su controlador como $scope.data .
Alternativamente, (probablemente mejor, en realidad) puede interpolar directamente en JavaScript. Pero esto no funcionará para JS incluido como archivo. Tendrá que ser un script en línea:
<script> var controllers = angular.module('myApp.controllers', []); controllers.controller('IndexController', ['$scope', function($scope) { $scope.data= #{JSON.stringify(myDataFromRoutes)}; }]); </script>NOTA: Las versiones recientes de Pug han reemplazado la sintaxis de interpolación anterior con lo siguiente:
ng-init="data = `${JSON.stringify(myDataFromRoutes)}`"