Как передать переменные сервера 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 });
});
-
На клиентской стороне вам нужен вызов 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
.