AngularJs在pjax之后停止工作

时间:2015-01-02 17:12:33

标签: angularjs angularjs-scope pjax angularjs-compile

我在页面上使用AngularJs和Pjax。

在我的页面的一部分重新加载Pjax后,Angularjs停止在那里工作。

简单{{2 + 2}}除了部件以外都可以使用,重新加载了pjax。

我发现,问题在于使用$ compile。

我尝试了不同的代码片段,但没有一个能为我工作。

这两个

  angular.element(document).ready(function() {
     angular.bootstrap(document);
   });

也不是这个

// outside of angular...
  var ngRefresh = function() {
  var scope = angular.element("body").scope();
  var compile = angular.element("body").injector().get('$compile');

  compile($("body").contents())(scope); 
  scope.$apply();
}

// PJAX
$('#page').on('pjax:success', function(e){
  ngRefresh();
});

代码片段对我有用。有人知道一个有效的解决方案吗?

UPD: 在PSL建议将$(" body")更改为$(document.body)之后,代码开始起作用。但是现在一切都是从头开始初始化的,每次pjax调用后我都会丢失我的数据(在我的例子中选择的图像)。我怎么能避免这个?

这是我的js文件:

app = angular.module("BlogImageApp", []);

app.controller("BlogImageController", function($http, $scope){

$scope.selectedImageId = null;
$scope.selectedImageUrl = "";

$scope.selectImage = function(image_id) {
    $scope.selectedImageId = image_id;
    var params = 'id='+image_id;
    $http.get('/blog/image/get-url-by-id?'+params).success(function(data){
        $scope.selectedImageUrl = data;
    });

}
});

// registers the BlogImageApp in the view

angular.bootstrap(document, ['BlogImageApp']);

1 个答案:

答案 0 :(得分:0)

加载div并运行其中包含的代码之间可能存在竞争条件。这里有一些jquery强制在div pjax加载后加载angularjs。

https://masonoise.wordpress.com/2013/05/01/pjax-and-angularjs/