【问题标题】:directive scope does not update after ng-click eventng-click 事件后指令范围不更新
【发布时间】:2014-07-22 12:18:53
【问题描述】:

我有一个指令,其中$scope.awards 在加载时为空:

 .directive('awardNavBar', function () {
     // Directive used to display a badge.
        return {
            restrict: 'E',
            scope: {
                awards: '='
            },
            replace: true,
            templateUrl: "/static/html/partials/directives/awardNavBar.html",
            controller: function ($scope) {
                    console.log($scope.awards)
            }
        }
    })

但是,当用户单击时,我的控制器会触发调用并更新 $scope.awards 的内容:

   .controller("awardController", ['$scope', '$rootScope', 'Restangular', "$q", "$location", "TokenRestangular",
        function ($scope, $rootScope, Restangular, $q, $location, TokenRestangular) {

            $scope.updateAwardScope = function () {
                resource = TokenRestangular.all('award');
                resource.getList()
                    .then(function (awards) {
                        $scope.awards = awards;
                    })
            }

        }])

我的问题是指令 scope.awards 保持空白并且永远不会更新。

有没有办法从控制器调用指令并更新它的范围?

我试过了:

$scope.$apply() 但得到错误:

[$rootScope:inprog] http://errors.angularjs.org/1.2.19/$rootScope/inprog?p0=%24digest

这是我的html:

首先是点击事件:

  <div ng-controller="awardController">
        <div class="btn-group pull-right" >
            <div ng-click="toggle('rightSidebar'); updateAwardScope()" class="btn btn-navbar">
                <i class="fa fa-comment"></i> Chat
            </div>
        </div>

然后是我的指令:

  <div ng-controller="awardController">
                     <award-nav-bar awards="awards"></award-nav-bar>
                </div>

【问题讨论】:

  • 尝试console.log(awards) 告诉我们出现了什么。
  • 显示您的 html 绑定。
  • @DaniloValente 我所有的对象:[Object, Object, count: 2, next: null, previous: null, route: "award", getRestangularUrl: function...]
  • @Spike 太棒了。现在按照 Chandermani 的建议,请出示您的 HTML 绑定。

标签: javascript angularjs


【解决方案1】:

对我来说,您似乎没有在 HTML 绑定中将 awards 包装在 {{ }} 中。试试这个:

<award-nav-bar awards="{{ awards }}"></award-nav-bar>

否则,awards 属性将等于字符串 "awards"

【讨论】:

  • 我明白了,现在说得通了。但是范围仍然没有更新。这是我现在使用 apply() 的地方吗?这仍然会给出错误.. [$rootScope:inprog] errors.angularjs.org/1.2.19/$rootScope/inprog?p0=%24digest
  • 你确定它真的没有更新吗?可能不会显示。无论如何,你能把它发布到 Plnkr 吗?
【解决方案2】:

我知道这是一个老问题,但解决方案不是你得到的,我做了一个指令,将范围从控制器隔离到一个模型,然后在指令中使用矩形从服务器获取文件,我只是尝试更新它使用正常:scope.myDirective = restdata,它适用于指令但不更新控制器中的范围,我尝试使用 $apply 但它抛出一个已经在处理中的错误,然后我最终使用 angular.extend 和这拯救了我的世界!,因为矩形有它的一个范围,它只更新到第一个父级,指令控制器,而主控制器永远不会更新。这就是 angular.extend 修复的内容。

如果对你有帮助,请告诉我

【讨论】:

  • 原发帖人已经接受了这个问题的答案。如果您想批评该答案,最好将其作为评论而不是将您的批评作为新答案。
猜你喜欢
  • 2017-07-24
  • 1970-01-01
  • 2019-07-16
  • 1970-01-01
  • 2015-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多