gpt4 book ai didi

angularjs - 我如何避免回调中的 $scope.$apply()

转载 作者:行者123 更新时间:2023-12-01 23:42:45 25 4
gpt4 key购买 nike

下面的代码工作正常。我只是想看看是否有更好的方法来编写它,这样我就可以避免在我的 Controller 中使用 $scope.$apply()

当用户点击“Sign Up” 按钮时,调用转到Controller,然后调用Service 以及Callback 方法。在服务中,我调用 Parse Cloud Code 来创建用户并在收到响应后调用回调。

问题是我必须在回调方法中调用 $scope.$apply() 才能将更改应用到绑定(bind)到的 vm.m.resp 属性跨度。

有没有一种方法可以将整个注册过程作为单个事务运行并避免回调?

有没有办法避免调用 $scope.$apply()

这是我的 UI 的样子:

<ion-view title="Sign Up">
<ion-content class="has-header">
<div class="list">
<label class="item item-input">
<span class="input-label">Username</span>
<input type="text" ng-model="vm.m.username">
</label>
<label class="item item-input">
<span class="input-label">Password</span>
<input type="password" ng-model="vm.m.password">
</label>
<label class="item">
<button class="button button-block button-positive" ng-click="vm.doSignUp()">Sign Up</button>
</label>
</div>
<div class="list">
<div class="bar bar-header bar-positive">
<span ng-bind="vm.m.resp"></span>
</div>
</div>
</ion-content>
</ion-view>

这是我的 Controller 的样子:

(function () {
'use strict';

angular.module('app').controller('UserAdminCtrl', ['$stateParams', '$scope', 'userAdminApi', UserAdminCtrl]);

function UserAdminCtrl($stateParams, $scope, userAdminApi) {
var vm = this;
vm.m = {};
vm.m.username = '';
vm.m.password = '';
vm.m.resp = '';

function doSignUp() {

userAdminApi.doSignup(vm.m, doSignUpCallback);
vm.m.resp = 'Signing up. Please wait...';
}

function doSignUpCallback(resp) {
vm.m.resp = resp;
$scope.$apply()
}
vm.doSignUp = doSignUp;
vm.doSignUpCallback = doSignUpCallback;
};
})();

这是我的服务的样子:

(function () {
'use strict';

angular.module('app').factory('userAdminApi', [userAdminApi]);

function userAdminApi() {

function doSignup(m,cb) {

Parse.Cloud.run('createUser', {m}, {
success: function (result) {
cb(result);
},
error: function (error) {
cb(error.message);
}
});
}

return {
doSignup: doSignup
};
};
})();

最佳答案

您可以使用 promise 回到摘要循环:

(function () {
'use strict';

angular.module('app').factory('userAdminApi', ['$q', userAdminApi]);

function userAdminApi($q) {

function doSignup(m) {
var deferred = $q.defer();
Parse.Cloud.run('createUser', {m}, {
success: function (result) {
deferred.resolve(result);
},
error: function (error) {
deferred.reject(error);
}
});
return deferred.promise;
}

return {
doSignup: doSignup
};
};
})();

这也为您提供了一个漂亮而干净的错误回调。

关于angularjs - 我如何避免回调中的 $scope.$apply(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30563596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com