Javascript 当我重新加载禁用未工作时,使用angularjs使用按钮禁用ng重复?
我有一个商店列表,当用户单击“应用”按钮被禁用但我正在重新加载该页面时,它会显示基于服务的一个“接受”按钮的商店列表 残疾人不能工作。 期望值:一旦用户单击应用按钮,当用户转到该页面时,按钮应被禁用Javascript 当我重新加载禁用未工作时,使用angularjs使用按钮禁用ng重复?,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我有一个商店列表,当用户单击“应用”按钮被禁用但我正在重新加载该页面时,它会显示基于服务的一个“接受”按钮的商店列表 残疾人不能工作。 期望值:一旦用户单击应用按钮,当用户转到该页面时,按钮应被禁用 var-app=angular.module('plunker',[]); 应用程序控制器('MainCtrl',函数($scope){ $scope.name='World'; $scope.services=[ {{u id:1,标题:“服务1”}, {{u id:2,标题:“服务2”}, {
var-app=angular.module('plunker',[]);
应用程序控制器('MainCtrl',函数($scope){
$scope.name='World';
$scope.services=[
{{u id:1,标题:“服务1”},
{{u id:2,标题:“服务2”},
{u id:3,标题:“服务3”}
];
$scope.apply=功能(服务){
控制台日志(服务id+“单击”);
service.clicked=true;
}
});代码>
安古拉斯普朗克
文件。写(“”);
你好{{name}}
{{service.title}}
应用
我认为你应该使用SPA之类的东西&根据他们的url会有不同的看法
您应该创建一个具有可共享变量的服务,而不是将变量存储在控制器中。当您转到应用程序中的其他页面时,一旦其他带有控制器的模板加载到该页面,依赖控制器将销毁其作用域
服务
app.service('dataService', function(){
this.services = [
{_id: 1, title: "Service 1"},
{_id: 2, title: "Service 2"},
{_id: 3, title: "Service 3"}
];
})
控制器
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope, dataService) {
$scope.name = 'World';
$scope.services = dataService.services;
$scope.apply = function(service){
console.log(service._id + " clicked");
service.clicked = true;
}
});
一个选项是保存到本地存储。当选项卡/窗口关闭时,这种情况将持续存在。然而,它是客户端存储。如果用户在新浏览器中打开它,它将不包含该数据。如果数据需要跨机器持久化,那么后端数据库可能是更好的选择
localStorage和sessionStorage将对象存储为键值对。其中,值转换为字符串。你必须根据自己的需要决定最佳结构
我决定使用一个键将所有内容存储为JSON。这意味着每次读取时,我都必须解析它。保存意味着我必须阅读所有内容,修改我需要的项目,然后将其全部保存回去
另一种选择是indexedDB,它是一个客户端数据库。允许复杂的数据结构,并且不需要您首先对对象进行字符串化,但是它的实现更加复杂,并且不如localStorage那么受支持
下面是本地存储的一个非常粗略的快速概念:
以下是服务的螺母和螺栓:
app.service('ServiceHelper', function(){
//Our service helper service
this.get = function(){
//Read service from local storage, remember its saved as a string so parse
return JSON.parse(localStorage.getItem('services'));
}
this.save = function (title) {
//Save a new service. First have to read all, append new service then save all
var services = this.get('services') || [];
services.push({title: title, accepted: false});
localStorage.setItem('services', JSON.stringify(services));
}
this.markedAsAccepted = function (i){
//Mark service as accepted at a certain index
var services = this.get();
services[i].accepted = true;
localStorage.setItem('services', JSON.stringify(services));
}
});
一些文档:
您在当前会话中仅设置了已单击的变量。重新加载页面时,页面将丢失并返回默认值。您需要为列表中的每个服务保留这些数据,以便在用户重新加载页面时记住这些数据。您可以使用API来请求服务。然后,当您单击accept时,发出另一个AJAX请求,将该服务标记为accepted等。因此,当用户重新加载页面时,他们将获得更新的信息。还有其他选项,比如本地/会话存储来持久化数据,或者indexedDB。但是那是客户端存储。我如何使用本地存储呢?请你解释一下,我会整理一下……你能分享我的答案吗?看我的答案,我能解释得更好