2014-12-04 60 views
1

我需要將狀態消息綁定到變量。如果它是空的,我需要隱藏div。如果它不是空的顯示div和消息。當我在控制器中更新$scope.statusMessage.msg時,{{statusMessage.msg}}未更新。如何解決它?模型的屬性沒有得到更新

<div class="alert alert-info" 
    ng-class="{'alert-danger': statusMessage.status == -1, 'alert-success': statusMessage.status == 1, 'alert-warning': statusMessage.status == 0}" 
    role="alert" ng-hide="(statusMessage.msg).length == 0">{{statusMessage.msg}}</div> 

$scope.statusButtonAction = function(action){ 
    $scope.statusMessage.msg = 'Validation Error'; 
} 

UPDATE 1

<form role="form" class="form-inline" id="status-buttons">    
    <button type="button" class="btn btn-warning btn-lg" ng-click="statusButtonAction('Validation Error')">Validation Error</button> 
</form> 

UPDATE 2 聲明的:

$scope.statusMessage = { 
    msg: '', 
    status: null 
}; 

UPDATE 3

http://jsbin.com/jaquc/2/

UPDATE 4

我用https://github.com/angular-ui/ui-router。和我的配置是:

prototypeApplication.config(function ($stateProvider, $urlRouterProvider) { 
    $stateProvider.state('welcome', { 
     url: '/', 
     views: { 
      '': { 
       templateUrl: 'views/prototype/welcome.html', 
       controller: 'welcomeController' 
      }, 
      '[email protected]': { 
       templateUrl: 'views/components/header.html' 
      }, 
      '[email protected]': { 
       templateUrl: 'views/prototype/welcome/check-in.html', 
       controller: 'checkInController' 

      }, 
      '[email protected]': { 
       templateUrl: 'views/prototype/welcome/status-buttons.html', 
       controller: 'checkInController' 
      } 

     } 
    }) 

UPDATE 5

很奇怪,但是當我從面向對象表示切換到普通變量的所有作品:

$scope.statusMessage = '123'; 
$scope.statusState = null; 

這是否意味着我必須使用一些技巧讓AngularJS讀取對象的屬性值?

+0

'NG隱藏= 「statusMessage.msg == ''」' – 2014-12-04 11:00:07

+0

請提供jsFiddle或plnkr ... – 2014-12-04 11:08:06

+0

你能告訴我們你如何調用statusButtonAction? – 2014-12-04 11:08:17

回答

0

我發現,編輯UI路由器這樣的配置可以解決問題

... 
[email protected]': { 
       templateUrl: 'views/prototype/welcome/check-in.html' 
/*, 
       controller: 'checkInController' */ // should be removed to work! 
... 
0

確保您定義$scope.statusMessage即:

$scope.statusMessage = {}; 

您嘗試在statusButtonAction功能設置$ scope.statusMessage.msg之前。

,並使用 ng-hide="!statusMessage.msg"ng-show="statusMessage.msg" 代替
ng-hide="(statusMessage.msg).length == 0"

請參閱工作演示這裏http://jsbin.com/vavahi/1/edit

+0

當我在Chrome中進行調試時,它顯示$ scope.statusMessage.msg獲得新值,但是'hide'指令保持隱藏並且沒有任何變化'{{statusMessage.msg}}' – 2014-12-04 11:36:37

+0

@Rcola ng-hide =「!statusMessage.msg」 – sylwester 2014-12-04 11:50:05

+0

@RCola請參閱http://jsbin.com/jaquc/2/edit?html,js,output – sylwester 2014-12-04 11:52:44

0

我認爲這個問題是使用 '==',而不是 '==='。前者的類型是強制轉換,結果有點「不可靠」,特別是對於字符串/數組...至少我使用ng-hide =「myArray.length === 0」作爲控制和工作的方式。 (但是,我不確定你想要在你的ng-class中用「... == -1」來做什麼等等 - 至少我沒有看到statusMessage.status被聲明或者用於你的代碼...)