2017-05-06 19 views
1

我在这里的角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是正确的,有“真”值。

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> 

所以我查看没有得到更新的范围。你能告诉我为什么吗?

我正在阅读有关角应用函数。但我不认为这对我有帮助。如果我做了我的更新后应用的功能:

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

我获得以下错误

Angular Apply Error

编辑: 我不知道为什么,但我解决了该问题:

现在我不再初始化customrules。 我在点击事件之后直接启动了这个值(isRegistered)。

之前: $ scope.customRule.isRegistered = isRegistered;

After: $ 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"); 
      }; 
+0

发布您的完整视图代码。大多数情况下,你可能错过了ng控制器 – Kalyan

回答

0

我看不到你第一次在你的控制器中初始化$scope.customRule.isRegistered的位置。但是,由于$scope.$apply()未解决您最可能尝试更新undefined变量的问题。

我会建议初始化$scope.customRule.isRegisteredfalse或者undefined以外的东西,它们都适合您的应用程序的逻辑。

与AngularJS一样强大,它使用从undefined变量变为定义变量的模型更新视图时遇到问题。

+0

在我的Js文件的顶部,我启动了customRule: $ scope.customRule = {isReadOnly:true,isRegistered:false}; – NikDev