Как передать переменные сервера node.js в мое представление angular/html?

У меня есть этот маршрут в моем файле app.js, который запускает сервер

app.get('/view/:item_id', function(req,res){
    var A = 5;
    res.render('view_item');

и у меня есть это в моем view_item.html:

<p>{{A}}</p>

Я хочу, чтобы он отображал значение переменной - 5. Если бы я использовал механизм шаблонов, например, jade, это было бы легко. Я мог бы изменить эту третью строку кода сервера на res.render({A:A},'view_item');

Но я использую html в качестве моего механизма шаблонов. Мои исследования до сих пор говорили мне, что использование механизма шаблонов с angular обычно плохое, и всегда есть способ сделать это с помощью angular, встроенного в систему шаблонов. Итак, как мне это сделать? Как-то передать его в область $scope и включить, например,

<script>
    $scope.A = {{A}};
</script>

Я не видел этого нигде, поэтому я не думаю, что это путь.

Ответ 1

Это двухэтапный процесс.

  • Во-первых, вам нужно использовать библиотеку (серверную библиотеку), например express, в node, чтобы настроить правильные маршруты (службы REST) ​​для ответа на ваши запросы:

Сторона сервера

//app = express();
    app.get('/api/:paramID1/:paramID2',function(req, res){
        return res.json({ A: 5 });
    });
  1. На клиентской стороне вам нужен вызов ajax для вызова службы, например:

    $http.get( "/api/1/abc").success(function( data ) {
      $scope.A= data; //from your sample;
      alert( "Load was performed. " + data );
    });
    

Обратите внимание, что при использовании REST существуют различные типы "методов", которые могут быть вызваны в зависимости от ваших потребностей, таких как POST, DELETE, UPDATE или только что упомянутых в примере GET.

Ответ 2

Если вы используете Angular, вероятно, вам следует создать одностраничное приложение - это применимо к большинству современных интерфейсных платформ. Для SPA-центров вы начинаете с базового html файла (возможно, index.html). Затем ваша инфраструктура обрабатывает рендеринг всего остального. Ваш сервер также может испускать шаблоны, но он никогда ничего не сделает.

app.get('/view/:item_id', function(req,res){

Это не должно ничего визуализировать или возвращать HTML. Вместо этого вы должны возвращать данные, которые будет использоваться передним концом для рендеринга - предпочтительно как JSON.

res.json({A: 5});

Затем с помощью Angular вы сделаете что-то вроде

$http.get("/view/1").success(function (data) {
    ctrl.A = data.A;
});

Ваш html/template будет иметь что-то вроде

<div ng-controller="ctrl as ctrl">
    <div>{{ctrl.A}}</div>

Как только $http.get завершается, заносится ctrl.A.