0

我在页面上同时使用 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']);
4

1 回答 1

0

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

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

于 2016-10-17T09:25:35.913 回答