在范围对象 userNotify 上有一些继承问题(希望如此)。
AccountCtrl处理用户帐户数据查看和更新,数据来自Parse.com数据库,通过 UserService 服务。
.controller('AccountCtrl', [
'$state', '$scope', 'UserService',
function ($state, $scope, UserService) {
UserService.currentUser().then(function (_user) {
$scope.user = _user;
notification = _user.get('days');
$scope.userNotify = {days: notification};
});
$scope.updateUser = function (_user) {
days = $scope.userNotify.days;
// days is logged with the correct value (if the user changed)
// but the db record is updated with the initial value not the new one.
// tested this by changing days to a random number.
console.log(days);
_user.set('days', days);
_user.save();
}
}])
数据显示在视图中, updateUser 函数应更新Parse db中的用户数据。
<div ng-controller="AccountCtrl">
<select ng-model="$parent.userNotify.days">
<option>1</option>
<option>2</option>
<option>3</option>
</select>
<a ng-click="updateUser($parent.user)">Save</a>
</div>
在 updateUser 函数中调用 _user.set 时, $ scope.userNotify.days 具有db中的旧值,因此更新具有相同的值,而不是用户选择的新值。 即使 console.log(days)显示正确的新值。
还尝试删除 $ parent 并使用基本类型。
这是UserService,它返回一个Promise:
.service('UserService', ['$q', 'ParseConfiguration',
function ($q, ParseConfiguration) {
return {
/**
* @param _parseInitUser
* @returns {Promise}
*/
currentUser: function (_parseInitUser) {
_parseInitUser = Parse.User.current();
if (!_parseInitUser) {
return $q.reject({error: "noUser"});
} else {
return $q.when(_parseInitUser);
}
}
}
}]);
非常感谢
答案 0 :(得分:0)
尝试将其作为html中的代码段
<body ng-controller="MainCtrl as main">
<ion-view>
<label class="item item-input item-select">
{{currentSelection.value}}
<select ng-model="currentSelection" ng-options="day as day.value for day in days track by day.value" style="width: 30px">
</select>
</label>
<a class="button" ng-click="updateUser($parent.user)">Save</a>
</ion-view>
</body>
这是javascript代码
angular.module('app', ['ionic'])
.controller('MainCtrl', ['$scope', function($scope) {
$scope.currentSelection = {};
$scope.currentSelection.value = 1;
$scope.days = [
{ value: 1 },
{ value: 2 },
{ value: 3 }
];
$scope.updateUser = function() {
days = $scope.currentSelection;
alert(JSON.stringify(days));
}
}]);
不确定为什么要弄乱$parent
以获取对用户的访问权限?只有一个当前用户,Parse提供了一个功能,可以让您在整个应用程序中访问它。
$scope.updateUser = function() {
UserService.currentUser().then(function (_user) {
return _user.save({days:daysValue});
}).then(function(_updatedUser){
console.log(_updatedUser);
}, function(_error) {
console.log(_error);
});
};
答案 1 :(得分:0)
我通过将视图中的日期传递到updateUser
函数来实现它。
在视图中:
<a ng-click="updateUser(user,userNotify.days)">Save</a>
在控制器中:
$scope.updateUser = function (_user,days) { console.log(days); }