2017-05-06 26 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