#javascript #angularjs
#javascript #angularjs
Вопрос:
Я создаю простое приложение, в котором пользователь входит в систему. После входа пользователя в систему его имя отображается в заголовке. Я создаю одностраничное веб-приложение. Мой пример веб-страницы :
<body ng-app="homePageApp" ng-controller="homeController">
<div class="page-header" style="margin-left: 5%">
<ui>
<header>
<div>
<li ng-hide="userDiv" ng-click="hideIt()"><a ui-sref="userPage">SignIn or Register</a></li>
<li><a>profile {{guest}}</a></li>
</div>
</header>
<hr>
:::::: // too much code below
Мой angularjs:
var homePage = angular.module('homePageApp', [ 'ui.router' ]);
homePage.config(function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/');
$stateProvider.state('/', {
url : '/',
templateUrl : '/templates/home.ejs'
}).state('home', {
url : '/home',
templateUrl : '/templates/home.ejs'
}).state('userPage', {
url : '/userPage',
templateUrl : './templates/userPage.ejs'
}).state('userPage.signin', {
url : '/signin',
templateUrl : './templates/signin.ejs',
controller : 'signinController'
}).state('userPage.register', {
url : '/register',
templateUrl : './templates/register.ejs',
controller : 'registerController'
})
});
homePage.controller
homePage.controller('homeController', function($http, $state, $scope,
$rootScope, $log) {
$log.info($state.current);
$scope.hideIt = function() {
$scope.userDiv = true;
}
$scope.signinUser = function(user) {
$http({
method : "POST",
url : "/signin",
data : user
}).then(function(res) {
if (res.data['status'] == 'success') {
$scope.guest = user.username;
$state.go('home', {
'user' : user.username
});
}
}, function(err) {
$log.info("Something bad happenned");
});
}
// for register
$scope.registerUser = function(user) {
$http({
method : "POST",
url : "/register",
data : user
}).then(function(res) {
$hhtp({
url : '/home',
method : "POST",
}).then(function(response) {
$log.info('Something something');
})
}, function(err) {
$log.info("Something bad happenned");
});
}
})
В приведенном выше коде мой метод hideIt() работает, но при успешном входе в систему $scope.guest = «yayayayyayayay» не работает.
Похоже ли это на то, что мы не можем вызывать переменные привязки данных в методе обратного вызова? Я не нашел ничего, относящегося к проблеме, с которой я столкнулся.
Комментарии:
1. Установлена ли в переменной $rootScope переменная $scope
2. Что делает ваш $state.go ? Я думаю, нам нужно увидеть ваши маршруты и контроллеры… Я почти уверен, что вы перезагружаете свою область после ее обновления.
3. Я добавил полный файл Java script
Ответ №1:
Вам необходимо обновить область видимости (непосредственно перед $state.go
этим) :
$scope.$apply();
Ответ №2:
вы пишете: $cope.guest = user.username;
вместо $scope.guest = user.username;