Я новичок в этом и пробуя AngularJS и NodeJS, я застрял в этой ошибке.
Я пытаюсь сделать опцию динамического выбора, я пытаюсь отобразить таблицу из базы данных MySQL с помощью NodeJS и передать данные в Angular. Я много пробовал решить эту проблему, но, возможно, я все еще не совсем понимаю angular, поэтому я еще не решил проблему.
Я использую nodeJS ver. 1.0.0 и AngularJS версии 1.7.5. Вот мой код:
controlAll.js
var http = require('http');
var qs = require('querystring');
var fs = require('fs');
var hbs = require('hbs');
var express = require('express');
var bodyParser = require('body-parser');
var route = express();
var mysql = require('mysql');
var konek = mysql.createConnection({
host: "localhost",
user: "root",
password: "",
database: "mahasiswa",
});
konek.connect(function(err){
if (err) throw err;
console.info("udah konek");
});
route.set('view engine', 'hbs');
route.use(bodyParser.json());
route.use(bodyParser.urlencoded({ extended: true }));
route.get('/mahasiswa/add', function(req, res){
res.render("formm");
});
route.get('/jurusan', function(req,res){
konek.query("SELECT * FROM `jurusan`",function(err,jurusan)
{
if (err) throw err;
res.send(JSON.stringify({
jurusan:jurusan
}));
});
});
formm.hbs
<!DOCTYPE html>
<html>
<head>
<title>tambah mahasiswa</title>
<link rel = "stylesheet" href = "/asset/css/bootstrap.min.css">
<script src = "/asset/js/bootstrap.min.js"></script>
<script type = "text/javascript" src = "/ang/angular.js"></script>
</head>
<body ng-app = "coba">
<div class = "container">
<form method = "POST" action = "/mahasiswa/add">
<div class = "form-group">
<label>Nama Mahasiswa</label>
<input type = "text" name = "nama" placeholder = "nama" class = "form-control">
</div>
<div class = "form-group">
<label>Nomor Pokok Mahasiswa</label>
<input type = "text" name = "npm" placeholder = "npm" class = "form-control">
</div>
<div ng-controller = "drpdn">
<div class = "form-group">
<label>Jurusan</label>
<select name = "id_jurusan" ng-model = "jurusan" class = "form-control">
<option disabled selected value>--Pilih Jurusan--</option>
<option ng-repeat = "jur in jurusan" value = "{{jur.id_jurusan}}">{{jur.namajurusan}}</option>
</select>
</div>
<div class = "form-group">
<label>Program Studi</label>
<select name = "id_prodi" class = "form-control">
<option disabled selected value>--Pilih Program Studi--</option>
</select>
</div>
</div>
<button type = "submit" class = "btn btn-primary">simpan</button>
</form>
</div>
</body>
</html>
<script type = "text/javascript">
var app = angular.module('coba',[]);
app.controller('drpdn', function($scope, $http){
$http.get("/jurusan")
.then(function(response){
$scope.jurusan = response.jurusan;
});
console.info($scope.jurusan);
});
</script>
Мой ответ nodejs, я помещаю массив в другой маршрут:
console.info($scope.jurusan)
И вот моя ошибка:
Еще одна ошибка:
Я ожидаю, что jurusan в angular покажет данные из jurusan в nodeJS @PalSingh
Angular (или интерфейс) не знает ничего, что вы объявили в NodeJS (или сервере), поэтому вам нужно получить данные с сервера с помощью $ http и назначить их jurusan.
поэтому я должен объявить маршрут для получения jurusan в файле nodeJS ?? @PalSingh
напишите, пожалуйста, свой ответ @PalSingh



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Ваш контроллер (или сервис) должен загрузить данные jurusan из вашей конечной точки nodejs, а затем использовать их:
app.controller('drpdn', function($scope, $http){
// Simple GET request example:
$http({
method: 'GET',
url: '/jurusan' // USE YOUR NODEJS ENDPOINT TO LOAD DATA
}).then(function(response) {
// this callback will be called asynchronously
// when the response is available
$scope.jurusan = response.data.jurusan;
}, function(response) {
// called asynchronously if an error occurs
// or server returns response with an error status.
});
});
Я попробовал ваш ответ, и <option> повторяется, но текст не отображается, он просто пустой
сделать $scope.jurusan = response.jurusan;
Можете ли вы опубликовать точный ответ, отправленный вашим node api?
Я проверяю свой угловой с console.info($scope.jurusan), он говорит, что undefined
Я попытался создать console.info под $scope.jurusan = response.data.jurusan, он показывает данные, но на ng-repeat он все еще пуст.
попробуйте $ scope. $ digest () после $ scope.jurusan = response.data.jurusan
я получил эту ошибку Error: [$rootScope:inprog] $digest already in progress
Тогда вам не нужно добавлять $ digest. В основном у вас есть данные в вашем контроллере, они также назначены для $scope.jurusan, может быть что-то маленькое, из-за которого имя не видно. Попробуй проверить, не выставляется ли value в опциях?
можешь показать какой именно console.info($scope.jurusan);. Сделайте это после того, как придадите ему ценность.
Журнал выглядит нормально. Попробуйте добавить track by $index в ng-repeat
нравится? ng-repeat = "track by $index
ng-repeat = "jur in jurusan track by $ index"
он дает тот же ответ :(
Проверьте, что это печатает в вашем ng-repeat: {{jur}}
Ошибка достаточно ясна,
$scope.jurusan = jurusan;здесь jurusan нигде в вашем коде не определен. Ожидаете ли вы, чтоjurusanбудет приносить какую-то ценность, исходящую от сервера?