使用 EJS 渲染 html 文件,其中包含 angular

Render html files with EJS with angular in it

我有一个节点 + angular 项目。我想渲染一个 html 页面并用一些值初始化它。我希望将这些值链接到 Angular 范围。

所以我有一个输入,我将它与 ng-model 链接,但这会删除 EJS 初始化。

server.js:

var express = require('express');
var app = express();
app.engine('html', require('ejs').renderFile);
app.set('views', __dirname + '/front/views');
app.set('view engine', 'html');
app.use('/front',express.static(__dirname + '/front'));

app.get('/signup',function(req,res){
    res.render('view',{
        user:{
            email:"user mail",
        }
    })
});
var port = 5000;
app.listen(port, function() {
    console.log("Listening on " + port);
});

view.html:

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js"></script>

<script src="/front/controllers/app.js"></script>

<html ng-app="onboardingApp">

    <form id="msform" novalidate ng-controller="onboardingController">

        <input required  type="text" name="email" ng-model="signup.user.email">
        <label for="email">Email</label>

        <input type="button" name="next" ng-click="displaySignup()" value="NEXT"/>

    </form>

</html>

app.js:

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

onboardingApp.controller('onboardingController',function OnboardingController($scope) {

    $scope.signup = {
        user:{
            email:""
        }
    }

    $scope.displaySignup = function(){
        console.log($scope.signup)
    }

});

所以我试图设置值:input required type="text" name="email" ng-model="signup.user.email"

with ejs 然后将此值与 angular 模型链接 signup.user.email.

有人可以帮我吗?

你可以在你的view.html

末尾加上这段js
<script type="text/javascript">
      angular.module('onboardingApp')
        .value('userEmail', <%- JSON.stringify(user.email) %>);
</script>

然后像这样在任何需要的地方注入组件:

onboardingApp.controller('onboardingController',
 function OnboardingController($scope, userEmail) {

    $scope.signup = {
        user:{
            email: userEmail
        }
    }

    $scope.displaySignup = function(){
        console.log($scope.signup)
    }

});