角度范围不会在视图

时间:2017-05-06 23:26:11

标签: javascript angularjs angularjs-scope

我在这里有一个角度ng-click事件:

eventApp.controller('DetailEventController', ['$scope', '$http', '$compile', '$timeout', function ($scope, $http, $compile, $timeout, uiCalendarConfig) {
$scope.customRule = { isReadOnly: true, isRegistered: false };
$scope.EventClick = function (event, jsEvent, view) {

                var isRegistered;
                console.log(event.character);
                angular.forEach(event.character, function (pvalue, pkey) {
                    for (var item in pvalue.teilnehmer) {
                        if (pvalue.teilnehmer[item] == CurrenUserName) {
                            console.log("User ist bereits angemeldet!");
                            isRegistered = true;
                        } else {
                            console.log("User ist noch nicht angemeldet!");
                            isRegistered = false;
                        }
                    }
                });
                $scope.customRule.isRegistered = isRegistered;

                console.log($scope.customRule);
                $scope.eventDetails = event;
                $("#detailEvent").css("display", "block");
            };
}]);

当我打开控制台时,$ scope.customRule是正确的并且具有“true”值。

User ist bereits angemeldet!
Object { isReadOnly: false, isRegistered: true }

但在我看来它仍然是“假的”。

View Result

HTML:

<div class="modal-footer">
            {{customRule}}
            <button title="Anmelden" class="btn btn-primary pull-right" ng-click="anmelden(eventDetails.id,radio.class.klasse2Event_Id)" ng-disabled="customRule.isReadOnly || customRule.isRegistered">Anmelden</button>
           <button title="Löschen" class="btn btn-primary pull-right" ng-click="removeEvent(eventDetails.id)" ng-disabled="customRule.isReadOnly">Event Löschen</button>
        </div>

所以我的视图没有获得更新的范围。你能告诉我为什么吗?

我正在阅读角度应用功能。但我不认为这有助于我。如果我在更新后执行apply函数:

$scope.customRule.isRegistered = isRegistered;
$scope.$apply();

我收到以下错误

Angular Apply Error

修改 我不明白为什么,但我解决了这个问题:

现在我不再启动定制规则了。 我在click事件后直接初始化这个值(isRegistered)。

在:  $ scope.customRule.isRegistered = isRegistered;

在:  $ scope.isRegistered = isRegistered;

$scope.EventClick = function (event, jsEvent, view) {

                var isRegistered;
                var testi;

                angular.forEach(event.character, function (pvalue, pkey) {
                    for (var item in pvalue.teilnehmer) {
                        if (pvalue.teilnehmer[item] == CurrenUserName) {
                            console.log("User ist bereits angemeldet!");
                            isRegistered = true;
                            testi = "WAHR";
                        } else {
                            console.log("User ist noch nicht angemeldet!");
                            isRegistered = false;
                            testi = "FALSCH";
                        }
                    }
                });

                $scope.isRegistered = isRegistered;
                $scope.eventDetails = event;
                console.log($scope.customRule);
                //$scope.eventDetails = event;
                $("#detailEvent").css("display", "block");
            };

1 个答案:

答案 0 :(得分:0)

我无法在控制器中看到您首次初始化$scope.customRule.isRegistered的位置。但是,由于$scope.$apply()未解决问题,因此您很可能正在尝试更新undefined变量。

我建议将$scope.customRule.isRegistered初始化为falseundefined以外的其他符合您应用程序逻辑的内容。

与AngularJS一样强大,它无法使用从undefined变量更改为已定义变量的模型更新视图。