【问题标题】:angular $scope in selector选择器中的角度 $scope
【发布时间】:2016-08-01 20:15:00
【问题描述】:

大家。 我是AngularJS的新手,觉得它很有趣,但我对以下情况有点不清楚。

angular.module("myApp", []).controller("myCtrl", function ($scope) {
$('#light-pagination').pagination({
    items: count,
    itemsOnPage: 10,
    cssStyle: 'light-theme',
    onPageClick: function (pageNumber) {
        ajaxHelper(AccountingObjectUri + '?$skip=' + (pageNumber * 10 - 10) + "&$top=10", 'GET').done(function (data) {
            // console.log(data);
            $scope.AccountingObject = data; //not working
        });
    }
});

}

我无法分配 $scope.AccountingObject = data;无论如何我可以将返回数据分配给 $scope 吗?

【问题讨论】:

  • 我不是角度大师,但我认为角度无法知道你改变了$scope.AccountingObject 值。您应该在指令而不是控制器中更新 DOM。调用 $scope.$apply() 应该可以,但我很确定这不是真正要走的路。
  • console.log(data); 发生了吗?如果是,那么您在视图中看不到数据的原因是您绕过了应用程序的角度部分。

标签: jquery angularjs api asp.net-web-api


【解决方案1】:

onPageClick 发生在通常的角度生命周期之外。您需要在分配数据后调用$scope.$apply() 告诉 Angular 更新视图。

.done(function(data) {
  $scope.$apply(function() {
     $scope.AccountingObject = data;
  });
});

在 Angular 中,一般规则是控制器内没有直接的 DOM 操作,首选方法是使用带有修改 DOM 的链接函数的指令(即调用 pagination())。

【讨论】:

  • 甚至更多的角度指令给你一个钩子到它们用链接函数中的elem/element对象表示的DOM。它要么是一个完整的 jQuery 对象,要么是一个 jQLite 对象。
【解决方案2】:

使用$scope.$evalAsync

                $scope.$evalAsync(function() {                    

                    $scope.AccountingObject = data;

                }); 

理想情况下,您应该在指令而不是控制器中更新 DOM。

【讨论】:

  • 我试过了。但不工作。 $scope.AccountingObject 需要分配内部控制器。无论如何我可以使用指令分配返回数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-24
  • 1970-01-01
  • 2020-11-13
  • 2017-06-03
  • 1970-01-01
  • 1970-01-01
  • 2016-02-03
相关资源
最近更新 更多