AngularJS:一旦承诺得到解决,就为新视图操纵DOM

时间:2015-09-29 19:02:01

标签: javascript angularjs dom angular-promise

在用户进入 AngularJS 应用程序的下一页之前,我会进行自定义调用以检索一些数据。我使用 AngularJS promise

成功实现了这一目标
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正试图被操纵。

承诺解决执行期间,您是否建议遵循操作新视图的解决方案?

1 个答案:

答案 0 :(得分:0)

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

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