Поэтому я создаю мобильное веб-приложение, и у меня есть форма, где они назначают встречи и сохраняют их на сервере MySQL. Мне нужно отправить идентификатор пользователя скрытым. У меня это уже в нг-инициации. и у меня есть контроллер, который получает его, и его можно использовать, чтобы поместить его в HTML. Я не очень хорош в angularjs. Я в основном использую php для всего и немного в javascript. Любая помощь будет оценена.
это моя форма
<div class="login-form" ng-controller="userIdCtrl" ng-init="init('<? echo $usernameid; ?>','<? echo $usernameid; ?>')">
<div class="center" style="margin:5px;color:white;">
<h2>Registro</h2>
<form role="form" name="registro" ng-controller="appointmentPostCtrl">
<div class="form-group">
<div class="col-md-9 col-sm-9 col-xs-9">
<select ng-model="especialidad" class="styled-select" required>
<option value="">Especilidad</option>
<?php echo $especialidades ?>
</select>
</div>
</div>
<div class="form-group">
<div class="col-md-9 col-sm-9 col-xs-9">
<select ng-model="facilidad" class="styled-select" required>
<option value="">Facilidad</option>
<?php echo $facilidades ?>
</select>
</div>
</div>
<br>
{{ userid }} <!--- test that it works ----->>>
<input ng-model="user" ng-value="{{ userid }}"> <!--- actual part that doesn't works it returned empty----->>>
<input type="date" ng-model="fecha" class="styled-select" style="width:40%; float:left;">
<input type="time" id="timeInput" name="timeInput" ng-model="hora" placeholder="HH:mm:ss" min="08:00:00" max="17:00:00" required />
<br><br>
<div style="margin-top:50px;">
<button ng-click="postData()" class="button button--large " style="background-color:#6CBA45;">Registrar</button>
<ons-button modifier="quiet" class="forgot-password" ><a style="text-decoration:none;color:white;" href="login.php">Cancelar</a></ons-button>
<span id="message">{{ message }}</span>
</div>
</form>
</div>
</div>
Контроллеры один для идентификатора пользователя и другой, который обрабатывает сообщение в MySQL
////////////////// userIdCtrl Controller //////////////////////
app.controller('userIdCtrl', function ($scope) {
$scope.init = function (userid, id) {
$scope.id = id;
$scope.userid = userid;
};
});
//////////// appointment post Controller/////////////////// ////////// ////////// ////////// ////////// ////////// ////////// ////////// ////////// ////////// ////
app.controller('appointmentPostCtrl', function ($scope, $http) {
$scope.postData = function () {
$scope.message = "";
var error = 0;
/*---------------- this is the part that is no working return as empty------ */
if ($scope.user == "" || $scope.user == null) {
error = 1;
}
/*--------------------------------------------------------------------- */if ($scope.especialidad == "" || $scope.especialidad == null) {
error = 2;
}
if ($scope.facilidad == "" || $scope.facilidad == null) {
error = 3;
}
if ($scope.fecha == "" || $scope.fecha == null) {
error = 4;
}
if ($scope.hora == "" || $scope.hora == null) {
error = 5;
}
/*---- Data is validated ------ */
if (error == 0) {
var request = $http({
method: "post",
url: "https://www.xxxxxxxx.com/angPost.php",
data: {
user: $scope.user,
especialidad: $scope.especialidad,
facilidad: $scope.facilidad,
fecha: $scope.fecha,
hora: $scope.hora
},
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
});
/* Check whether the HTTP Request is Successfull or not. */
request.success(function (data) {
$scope.message = "" + data;
});
} else {
$scope.message = "You have Filled Wrong Details! Error: " + error;
};
};
});
Я что-то не так делаю по логике ангуляра или мне не хватает ресурсов? Вы пытались сделать только один контроллер и тоже не работает. это самое близкое, что я могу получить при обработке ошибки. я думаю, что мне нужен маршрут нг или может быть услуга? нужен свет. Благодарю.
Сначала удалите это из разметки html:
<input ng-model="user" ng-value="{{ userid }}">
Тогда попробуйте обёртывание userid
в объекте на родительском контроллере:
app.controller('userIdCtrl', function ($scope) {
$scope.init = function (userid, id) {
$scope.postObj = {
id: id
userid: userid
};
};
});
А затем измените дочерний контроллер следующим образом:
if (error == 0) {
var request = $http({
method: "post",
url: "https://www.ivan-montes.com/websites/MPC_App/php/angPost.php",
data: {
user: $scope.postObj.userid, // this line should do it!
especialidad: $scope.especialidad,
facilidad: $scope.facilidad,
fecha: $scope.fecha,
hora: $scope.hora
},
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
});
/* Check whether the HTTP Request is Successfull or not. */
request.success(function (data) {
$scope.message = "" + data;
});
} else {
$scope.message = "You have Filled Wrong Details! Error: " + error;
};
};
Использовать этот ng-value="userid"
, Нам не нужны фигурные скобки для ng-значения.
app.controller('userIdCtrl', function ($scope, $rootScope) {
$scope.init = function (userid, id) {
$scope.id = id;
$rootScope.userid = userid; // around the application you can get this id. no more code
};
});
или же
<input ng-model="user" ng-value="$parent.userid">
или же
app.controller('userIdCtrl', function ($scope) {
$scope.init = function (userid, id) {
$scope.id = id;
// $scope.userid = userid;
$scope.$broadcast('userID', userid);
};
});app.controller('appointmentPostCtrl', function ($scope, $http) {
$scope.postData = function () {
$scope.message = "";
var error = 0;
$scope.$on('userID', function (event, data) {
$scope.userid = data;
});
});