Я пытаюсь создать приложение angularjs, где некоторый контент уже отправлен с первым запросом и, следовательно, показан пользователю до того, как angularjs даже загрузится. В случае, если пользователь очень быстро и уже вводит некоторые данные в текстовое поле (input type = "text"), тогда эти данные теряются после того, как угловые-js связывают.angularjs dynamic init через пользовательский ввод
Как я могу предотвратить это?
Приветствия, Роберт
Редактировать В качестве примера, я мог бы получить следующее с сервера
<html>
...
<body ng-app="app">
<div ng-controller="LoginCtrl">
<div ui-view>
<!-- start template which was sent with the initial request, corresponds to login.tpl -->
<input type="text" id="username" ng-model="credentials.username"/>
<input type="password" ng-model="credentials.password"/>
<!-- end template -->
</div>
</div>
</body>
</html>
app.js:
app.config(function($stateProvider){
...
//at this point the input of the user is still in the textbox
$stateProvider.state('login', {
resolve: {
credentials : function(){
var username = $('#username');
if (username) {
username = username.val();
}
//username is always empty, the binding process has already reset the input field
return username
}
},
url: '/login',
templateProvider: function($templateFactory) {
var username = $('#username');
if (username) {
username = username.val();
}
//username is always empty, the binding process has already reset the input field
return $templateFactory.fromUrl("login.tpl");
},
controller: function(username){
//username is always empty
},
data : {
requireLogin : false
}
});
...
});
app.run(function($rootScope) {
//username is still in the textbox
$rootScope.$on('$stateChangeStart', function(event, toState, toParams) {
//username is not in the textbox anymore
});
});
Я использую угловое разрешение ui-router для маршрутизации. Я попытался перехватить привязку в нескольких местах. Сначала я попытался получить вход пользователя в разрешении (с помощью jquery, потому что я хочу, чтобы вход перед угловым удалением его, поэтому я не могу использовать угловой для этой задачи), но на этом этапе имя пользователя уже пусто. Я также пытался сделать это в templateProvider, но это даже выполняется позже и, следовательно, слишком поздно. Я также пытался прослушать $ stateChangeStart в app.run, но имя пользователя также больше не находится в текстовом поле (все же, оно есть в app.run в начале - привязка должна происходить где-то в то же время) Я довольно уверен, что мне нужно как-то перехватить привязку, но я не знаю, как я могу ее достичь, не ставя директиву по каждому полю ввода, чего я не хочу делать.
Фактически, ваши решения не имеют смысла. Почему вы используете JQuery здесь? – Claies
Вы правы, моя ошибка, решение приходит перед templateProvider. Но, тем не менее, текстовое поле уже очищено на этом этапе. Я использую jquery, так как хочу получить вход пользователя, прежде чем угловой привяжет модель, чтобы я мог инициализировать модель соответственно. Я мог бы также использовать чистый javascript, но, безусловно, не угловатый. –
Постараюсь уточнить, пожалуйста ... –