Angularjs Angular JS:刷新页面时,所有$scope都将丢失
在刷新页面时,我在使用angularJS时遇到了几个问题。用户成功登录后,如果刷新页面,则所有$scope都将丢失。用户必须再次登录,然后注销。我遇到的另一个问题是,当用户注册事件时,他们可以查看用户仪表板中的所有事件。在用户仪表板中,他们将事件放在带有“删除”按钮的“卡片”中。查看“下面的事件卡代码” **下面是活动卡**Angularjs Angular JS:刷新页面时,所有$scope都将丢失,angularjs,Angularjs,在刷新页面时,我在使用angularJS时遇到了几个问题。用户成功登录后,如果刷新页面,则所有$scope都将丢失。用户必须再次登录,然后注销。我遇到的另一个问题是,当用户注册事件时,他们可以查看用户仪表板中的所有事件。在用户仪表板中,他们将事件放在带有“删除”按钮的“卡片”中。查看“下面的事件卡代码” **下面是活动卡** <div class="container-fluid"> <div class="row"> <div class="col m3 l
<div class="container-fluid">
<div class="row">
<div class="col m3 l3" ng-repeat="items in userEvents">
<div class="card">
<div class="card-image">
<img src="/images/uploads/{{items.eventImage}}"/>
<span class="card-title">{{ items.title }}</span>
</div>
<div class="card-content">
<p>{{ items.description }}</p>
</div>
<div class="card-action"> <!--BREAKING STUFF HERE!-->
<a class="waves-effect waves-light btn" ng click="updateEvent(items._id)" ui-sref="updateDash">Edit</a>
<a class="waves-effect waves-light btn" ng-click="deleteEvent(items._id)">Delete</a>
</div>
</div>
</div>
我放置了$window.location.reload();刷新页面,以便删除的“事件卡”不会显示在页面上,但页面似乎会破坏事件卡,用户$scope将丢失。我的导航栏按钮变为登录和注册按钮,就好像没有用户登录一样
请帮忙 重新加载页面将消除所有当前作用域,因为您实际上是在将页面重置回其初始状态
如果要在不重置页面上的作用域的情况下删除数据,请调用从userEvents列表中删除该项。重新加载页面将消除所有当前作用域,因为实际上是将页面重置回其初始状态
如果您想删除数据而不重置服务器上的作用域,请调用从userEvents列表中删除该项。我不知道如何实现后端,因此此解决方案只是一个一般猜测。对于用户登录,不应将用户信息保存在$scope.user中,而应使用会话保存刷新期间要保留的任何信息 例如,创建一个如下所示的服务:
angular.module('...')
.service('SessionService', function($window) {
var service = this;
var sessionStorage = $window.sessionStorage;
service.get = function(key) {
return sessionStorage.getItem(key);
};
service.set = function(key, value) {
sessionStorage.setItem(key, value);
};
service.unset = function(key) {
sessionStorage.removeItem(key);
};
});
在控制器中:
angular.module('...')
.controller("LoginCtrl", function($scope, SessionService) {
$scope.logIn = function(credentials) {
$http.post('/someUrl', {credentials: credentials}).then(
function(res) {
SessionService.set("userId", res.data.id);
// prefer SessionService.set("userToken", res.data.userToken);
});
}
});
然后,当您检查用户是否登录时,只需检查
SessionService.get("userId") is undefined or not
您可以将其放入另一个通常称为身份验证的服务中
同样,因为我不知道您的身份验证在后端是如何工作的,所以我不知道您需要在前端保留哪些数据,以便即使在刷新页面后,您也可以使用保存在会话存储中的数据再次从后端查询正确的当前登录用户
刷新页面后,angular应用程序将恢复到初始状态,因此想法很简单:
我不知道如何实现后端,所以这个解决方案只是一个猜测。对于用户登录,不应将用户信息保存在$scope.user中,而应使用会话保存刷新期间要保留的任何信息 例如,创建一个如下所示的服务:
angular.module('...')
.service('SessionService', function($window) {
var service = this;
var sessionStorage = $window.sessionStorage;
service.get = function(key) {
return sessionStorage.getItem(key);
};
service.set = function(key, value) {
sessionStorage.setItem(key, value);
};
service.unset = function(key) {
sessionStorage.removeItem(key);
};
});
在控制器中:
angular.module('...')
.controller("LoginCtrl", function($scope, SessionService) {
$scope.logIn = function(credentials) {
$http.post('/someUrl', {credentials: credentials}).then(
function(res) {
SessionService.set("userId", res.data.id);
// prefer SessionService.set("userToken", res.data.userToken);
});
}
});
然后,当您检查用户是否登录时,只需检查
SessionService.get("userId") is undefined or not
您可以将其放入另一个通常称为身份验证的服务中
同样,因为我不知道您的身份验证在后端是如何工作的,所以我不知道您需要在前端保留哪些数据,以便即使在刷新页面后,您也可以使用保存在会话存储中的数据再次从后端查询正确的当前登录用户
刷新页面后,angular应用程序将恢复到初始状态,因此想法很简单:
$window.location.reload()代码>
拼接用户事件(预期为userEvents[])
在ng repeat=“userEvents中的项目按$index跟踪”中跟踪索引
然后将$index添加为ng中的参数,单击“删除事件(项).\u id,$index)”
如果刷新页面,所有$scope都将丢失
刷新时将重新初始化作用域
而不是重新加载$window.location.reload()代码>
拼接用户事件(预期为userEvents[])
在ng repeat=“userEvents中的项目按$index跟踪”中跟踪索引
然后将$index作为参数添加到ng click=“deleteEvent(items.\u id,$index)”
如何获取userEvents
数据?还是通过api/服务?另外,请输入一些错误
@kiro112可能此更新会有所帮助吗?userEvents
的数据类型是什么?对象或数组?如何获取userEvents
数据?还是通过api/服务?另外,请输入一些错误
@kiro112可能此更新会有所帮助吗?userEvents
的数据类型是什么?对象或数组?不仅仅是$scope,它似乎是在该点之前保存的每个$scope。是的,刷新页面会完全重置所有内容-重新加载页面并不是像SPA中那样更新数据的方式,不仅仅是$scope,是的,刷新页面会完全重置所有内容-重新加载页面并不是像spa中那样更新数据的方式