【问题标题】:angularjs extend promise with thenapplyangularjs 用 thenapply 扩展承诺
【发布时间】:2013-08-05 03:33:21
【问题描述】:

在 angularjs 中,通常在 Promise 的 then 方法中,您需要对范围进行一些更改,这需要您将代码包装在 $scope.$apply(.. .)。 我想知道是否以及如何扩展承诺以提供 thenapply 函数,这将不再需要您进行包装,所以而不是

myPromise.then(function() { $scope.$apply(function(data) { $scope.message=data.message; }) });

你可以写:

myPromise.thenapply( function() { $scope.message=data.message; });

【问题讨论】:

    标签: angularjs promise


    【解决方案1】:

    如果myPromise 是有角度的$q 保证你根本不需要调用$scope.$apply,因为then 回调是在有角度的“世界”中执行的,并且对范围的更改会传播给它的所有“观察者”。

    当然,我假设您在角度 $digest 循环中解决了您的承诺。如果不是,您需要在解决承诺时致电$apply

    如果myPromise 是不同的promise 实现,您总是需要在解决它时调用$scope.$apply,就像在angular 'world' 之外执行的任何其他操作一样,因为angular 对此一无所知。

    我不会添加 thenapply 方法来承诺,因为它鼓励使用 Angular 的不良风格,只需在您解决承诺的地方添加 $apply 调用,如果它在角度 $digest 循环之外。

    【讨论】:

    • 这是一个 jquery 承诺,来自 signalr 库。所以我无法控制它。
    • 一个 jquery 到 Angular Promise 转换器可能是解决方案,但它不知道如何编写代码。然后可以写: .convert(jqueryPromise).then(function() { .... })
    猜你喜欢
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 2014-07-18
    相关资源
    最近更新 更多