gpt4 book ai didi

javascript - 范围从 Promise 内部发生变化

转载 作者:行者123 更新时间:2023-12-02 18:36:14 25 4
gpt4 key购买 nike

我正在将 BreezeJS 与 AngularJS 结合使用,但我很难理解如何让 Promises 与 $scope 一起使用。每当我尝试提交表单时,它都不会显示验证错误,直到我第二次单击它。我意识到我可以调用 $scope.$apply() 但我读到它不是最佳实践?这是我的代码:

app.controller("MainController", ["$scope", "$q", "datacontext", function ($scope, $q, datacontext) {
datacontext.manager.fetchMetadata();
$scope.errors = [];

$scope.addDamp = function () {
var item = datacontext.manager.createEntity("Damp", {
name: $scope.newDamp
});

var tes = datacontext.manager.saveChanges()
.then(function () {
alert("yay");
})
.fail(function (error, a, b, c) {
var arr = [];
error.entitiesWithErrors.map(function (entity) {
entity.entityAspect.getValidationErrors().map(function (validationError) {
arr.push(validationError.errorMessage);
});
});
$scope.errors = arr;
datacontext.manager.rejectChanges();
});
};
}]);

处理来自 Promise 内部的范围更改的最佳方法是什么?

最佳答案

是的,你在这里需要 $scope.apply,因为 promise 不是来自核心 Angular 调用(例如 $http,它会在幕后处理 .apply() 本身) 。事实上,BreezeJS 页面 ( http://www.breezejs.com/samples/todo-angular ) 上的 Breeze/Angular 示例在数据检索后包含 $scope.apply() :

   datacontext.getAllTodos()
.then(success)
.fail(failed)
.fin(refreshView);

function refreshView() {
$scope.$apply();
}

将 $scope.apply() 扔到不需要的地方是一个不好的做法。但是当你处理 Angular 本身之外创建的 Promise 时,它​​就会出现。

关于javascript - 范围从 Promise 内部发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17287806/

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