【问题标题】:AngularJS: Manipulate DOM for the New View Once Promise Is ResolvedAngularJS:一旦 Promise 得到解决,就为新视图操作 DOM
【发布时间】:2015-12-27 09:33:02
【问题描述】:

在用户转到我的 AngularJS 应用程序的下一页之前,我进行了自定义调用以检索一些数据。我通过 AngularJS 承诺成功实现了这一目标

app.config(['$routeProvider', function ($routeProvider) { $routeProvider
   .when("/", {templateUrl: "partials/home.html", controller:  "PageCtrl", 
               resolve: {delay: myFunction} })

...

 var myFunction = function($q, $timeout){
      var defer = $q.defer();
      myCustomAjaxCall({  
        success: function() {   
            defer.resolve();
          },  
        error: function() {    
            defer.reject('Reject error');
          }
      });
      return defer.promise;
 };

注意myCustomAjaxCall 函数。我必须按原样使用它。它进行调用并在成功时运行回调。这反过来解决了我的诺言。

这个myCustomAjaxCall 函数试图为新视图操作DOM。但是,promise 在新视图呈现之前就已解决。当视图已更改并准备好进行 DOM 操作时,它是 路由器的 routeChangeSuccess 方法。然而,就我而言,为时已晚,因为 DOM 试图在新视图呈现之前被操纵。

promise resolve 执行期间,您是否建议遵循任何解决方案来操作新视图?

【问题讨论】:

    标签: javascript angularjs dom angular-promise


    【解决方案1】:

    您可以在 defer.resolve 本身中执行代码。你试过吗?

    defer.resolve(function() {
        // your code
    })
    

    【讨论】:

    • 您是否建议在 resolve() 函数中运行 myCustomAjaxCall?会发生什么变化?不过谢谢提示
    • 不,我认为当它解决时,解决此时的视图可能是您的解决方案。我自己从未尝试过这种方法。
    猜你喜欢
    • 2016-06-29
    • 2020-02-09
    • 2020-02-23
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多