我正在使用Ionic Framework和Cordova Sqlite构建一个移动应用程序。我正在离子列表中显示来自sqlite数据库的数据。每个离子列表项都有一个按钮,用于从数据库中删除相应的项。单击按钮,数据将从数据库中删除,但它将继续显示在离子列表中,直到我返回到其他视图并返回到它。我需要立即刷新视图,并从列表中删除该项。而且,我所有的SQL代码都在控制器中,所以我似乎还需要重新加载控制器。
应用程序。js公司
.state('app.cart', {
url: '/cart',
views: {
'menuContent': {
cache: false,
templateUrl: 'templates/cart.html',
controller: 'NFController'
}
}
})
控制器。js公司
.controller('NFController', ['$scope', '$cordovaSQLite','$cordovaToast','$state','$stateParams', function($scope, $cordovaSQLite, $cordovaToast, $state,$stateParams) {
$scope.listItems= [];
$cordovaSQLite.execute(db, 'SELECT * FROM cart ORDER BY id DESC')
.then(
function(res) {
$scope.cartTotal=0;
$scope.crtPP=0;
if (res.rows.length > 0) {
for (var i=0; i<res.rows.length; i++) {
**$scope.crtPP=res.rows.item(i).productPrice*res.rows.item(i).productQuantity;
$scope.cartTotal=$scope.cartTotal+$scope.crtPP;
$scope.CProductName=res.rows.item(i).productName;
$scope.listItems.push(res.rows.item(i));**
}
}
else{
$scope.status = "No Products in the Cart";
}
},
function(error) {
$scope.statusMessage = "Error on loading: " + error.message;
}
);
$scope.remove = function(id) {
$cordovaSQLite.execute(db, 'DELETE from cart WHERE id=?', [id])
.then(function(res) {
//$state.go($state.current, {}, {reload: true});
var current = $state.current;
var params = angular.copy($stateParams);
$state.transitionTo(current, params, { reload: true, inherit: true, notify: true });
$cordovaToast.show('Removed from Cart','short','bottom');
}, function(error) {
console.log(error.message);
})
}
}])
单击按钮时调用remove()。
更新的代码:
.controller('NFController', ['$scope', '$cordovaSQLite','$cordovaToast', function($scope, $cordovaSQLite, $cordovaToast) {
$scope.listItems= [];
$cordovaSQLite.execute(db, 'SELECT * FROM cart ORDER BY id DESC')
.then(
function(res) {
$scope.cartTotal=0;
$scope.crtPP=0;
if (res.rows.length > 0) {
for (var i=0; i<res.rows.length; i++) {
$scope.listItems.push(res.rows.item(i));
}
cartTotal(); //cartTotal() called initially when the controller loads
console.log("Cart Total : " + $scope.cartTotal);
}
else{
console.log("####console######## NO results found #######"+"Table record #: ");
}
},
function(error) {
}
);
$scope.remove = function(id) {
$cordovaSQLite.execute(db, 'DELETE from cart WHERE id=?', [id])
.then(function(res) {
var index=$scope.listItems.indexOf(id)
$scope.listItems.splice(index,1);
cartTotal(); //CartTotal() called second time
$cordovaToast.show('Removed from Cart','short','bottom');
}, function(error) {
console.log(error.message);
})
console.log(id);
}
function cartTotal()
{
angular.forEach($scope.listItems, function(item, key) {
$scope.crtPP = item.productPrice * item.productQuantity;
$scope.cartTotal += $scope.crtPP;
console.log($scope.cartTotal);
});
}
}])
当您在
$scope.remove = function(id) {
...
}
不需要重新加载视图。您可以轻松删除所有这些内容:
var current = $state.current;
var params = angular.copy($stateParams);
$state.transitionTo(current, params, { reload: true, inherit: true, notify: true });
您可以使用项目数组<代码>$范围。列表项=[] 应该绑定到视图,因此您只需从数组中删除该项或重新加载它,视图就会自动更新。
$scope.remove = function(id) {
$cordovaSQLite.execute(db, 'DELETE from cart WHERE id=?', [id])
.then(function(res) {
$scope.listItems = <find the id in the list and remove it>;
$cordovaToast.show('Removed from Cart','short','bottom');
}, function(error) {
console.log(error.message);
})
}
而不是只将id传递给$范围。remove方法您可以传递整个项并使用它查找数组中的元素,以便将其删除:
$scope.remove = function(item) {
$cordovaSQLite.execute(db, 'DELETE from cart WHERE id=?', [item.id])
.then(function(res) {
var index = $scope.listItems.indexOf(item);
$scope.listItems.splice(index, 1);
$cordovaToast.show('Removed from Cart','short','bottom');
}, function(error) {
console.log(error.message);
})
}
和您的HTML:
<a class="btn" ng-click="remove(item)">Delete</a>
更新:
关于您评论中的问题,我将使用数组范围计算总数。列表项。
我想您已经在您的范围内定义了一个属性:
$scope.cartTotal = 0;
我将添加一个函数:
function calculateCartTotal()
{
angular.forEach($scope.listItems, function(item, key) {
$scope.cartTotal += item.amount;
});
}
PS:item.amount
或任何你的值。
并在拼接后重新计算:
$scope.remove = function(item) {
$cordovaSQLite.execute(db, 'DELETE from cart WHERE id=?', [item.id])
.then(function(res) {
var index = $scope.listItems.indexOf(item);
$scope.listItems.splice(index, 1);
calculateCartTotal();
$cordovaToast.show('Removed from Cart','short','bottom');
}, function(error) {
console.log(error.message);
})
}
如果由于没有值item.amount
(或类似值)而无法执行此操作,则始终可以在该函数中重新执行查询并提要$scope.cartTotal
。
更新:
function cartTotal()
{
$scope.cartTotal = 0;
angular.forEach($scope.listItems, function(item, key) {
$scope.crtPP = item.productPrice * item.productQuantity;
$scope.cartTotal += $scope.crtPP;
console.log($scope.cartTotal);
});
}
使用Ionic框架在登录/注销时完成清除历史记录和重新加载页面后 我想知道同样的问题,但对于ionic2使用typecript。 在登录和注销时,我需要重新加载应用程序。ts,因为有些类在构造上运行库。 它基本上是重定向到家庭并重新加载。
我正在用Ionic framework开发移动应用程序。移动应用程序有一个登录页面。 登录页面后,转到另一个显示用户信息的页面。首先用户登录系统,之后用户可以看到自己的信息。但注销后,另一个用户登录到系统中,另一个用户看不到自己的信息,用户看到的是老用户的信息。如何重新加载用户信息页面? 我试图解决这样的问题; 注销时, 但这并不有效。 有其他解决方案吗?有人能帮我吗?我如何重新加载信息页面? 我
问题内容: 我正在使用Ionic Framework开发应用程序,并且有多个视图。路由名称是 app.view1 和 app.view2 。我使用控制器切换到下一个视图,当我单击返回时,app.view1的控制器不再执行,这在我的应用程序中非常重要。 请告诉我如何在每次路由到控制器时执行它。 问题答案: Ionic缓存视图以提高性能。它使用的功能。 Ionic最多可以缓存10个视图,不仅可以配置它
问题内容: 我已经在互联网上搜寻了好几个小时了,有很多“有用的”建议……除了问题之外什么也没有。 这就是我,几乎完全是: 在Docker容器中播放框架自动加载 我正在运行Play的最新版本(我认为,不知道如何检查,但下载了<一周前)!具有Java 8的ubuntu docker容器内部的框架,使用以下dockerfile构建: 互联网上的多个来源显示出相同或相似的问题,或多或少得出了相同的结论。我
问题内容: 我没有找到有关此问题的文章,但没有一个解决我的问题。 就像我说的那样。 ViewControllerA ViewControllerB 我试图将添加为的子视图,但是它 抛出类似“ ” 的错误。 下面是代码… ViewControllerA ViewControllerB只是一个带有标签的简单屏幕。 ViewControllerB EDIT 根据用户答案的建议解决方案,ViewCon
当我单击一个按钮(刷新页面中的数据,释放缓存)主页时,我想刷新页面我的主页中有一个列表。有一个功能可以更改列表上的项目。但当我更改项目并重定向到主页时,它会显示以前的值,直到刷新页面为止,我只想在按下按钮时刷新(清除主页上的缓存)。控制器处于$状态。go(“应用程序订阅”) 我写了这个。如何更改它?