Я пытаюсь сделать свое первое приложение AngularJS, и у меня возникла проблема.AngularJS view not update
У меня есть вход:
<input ng-model="userNameLogin" type="text" placeholder="username" class="form-control">
Кнопка:
<button ng-click="setActiveUser()" type="submit" class="btn btn-success">Sign in</button>
и выражение:
{{ activeUser }}
Я хочу, чтобы текст, чтобы изменить то, что был набран на входе после нажатия кнопки. Для этого у меня есть следующий контроллер:
app.controller('View1Ctrl', ['$scope', function($scope) {
$scope.userNameLogin = "";
$scope.activeUser = "Test";
$scope.setActiveUser = function() {
$scope.activeUser = $scope.userNameLogin;
console.log($scope.activeUser);
};
}]);
Начальное значение «Тест» показано очень хорошо, и в соответствии с консолью значения «activeUser», изменяющейся правильно, как хорошо. Но текст в представлении остается прежним.
Я видел подобные вопросы, где $scope.$apply()
был ответ, но если я добавлю, что после того, как я получаю console.log
"Error: [$rootScope:inprog] $apply already in progress".
Что я здесь отсутствует?
EDIT:
Я заметил, что если я кладу ввода, кнопки и выражение в том же HTML файл все работает нормально. Однако мой ввода и кнопки находятся в навигационной панели в index.html
в то время как выражение в view1.html
Это тело index.html
:
<body ng-app="myApp.view1">
<nav class="navbar navbar-inverse navbar-fixed-top" ng-controller="View1Ctrl as view">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand" href="#/view1">Kwetter</a>
</div>
<div class="navbar-collapse collapse" >
<ul class="nav navbar-nav">
<li><a href="#/view1">Home</a></li>
<li><a href="#/view2">Profile</a></li>
</ul>
<form class="navbar-form navbar-right">
<div class="form-group">
<input ng-model="userNameLogin" type="text" placeholder="username" class="form-control">
</div>
<div class="form-group">
<input type="password" placeholder="password" class="form-control">
</div>
<button ng-click="setActiveUser()" type="submit" class="btn btn-success">Sign in</button>
</form>
</div>
</div>
</nav>
<div id="pagewrapper" class="container">
<div ng-view></div>
<div>Angular seed app: v<span app-version></span></div>
</div>
и это мой view1.html
<div ng-controller="View1Ctrl as view">
<!-- row 1: welcome -->
<div class="row">
<div class="col-md-12 pull-left">
<image ng-src="{{ view.users[0].avatar }}"/>
<!-- If I put the button and input here it will work -->
<input ng-model="userNameLogin" type="text" placeholder="username" class="form-control">
<button ng-click="setActiveUser()" type="submit" class="btn btn-success">Sign in</button>
{{ activeUser }}
</div>
</div>
<!-- row 2: main content -->
<!-- left the rest of the content out because it would just clutter the page -->
Я попытался поставить ng-controller
в <div id="pagewrapper" class="container">
вместо первого div view1.html
, но это не имело значения.
Возможно, вы разместили '{{activeUser}}' вне контроллера div –
Спасибо за предложение, pankajparker. Я проверил, и это не так. – Berry
Бен Фельда, «текст остается тем же» Я имею в виду, что он говорит «Тест», даже после нажатия кнопки. – Berry