2016-04-27 53 views
1

我想每10秒進行一次http調用,然後顯示一個div,如果rootScope.mailSent等於true。通話很好。

在我的控制器中我已經做到了:

$interval(function(){ 
     $http.get("/api/sentMails") 
     .then(function(response) { 
      if (response.data.length>0){ 
       $rootScope.mailSent = true; 
      } 
     }); 
    }.bind($rootScope), 10000); 

筆者認爲:

<div ng-show="{{mailSent === true}}" class="pastille" ng-cloak=""></div> 

但DIV從來沒有顯示,而mailSent值爲true。 我錯過了什麼嗎?

+0

你不需要'{{}}''中的NG-show'因爲它接受一個表達式。 –

+0

是否每次請求完成時都嘗試console.log($ rootScope.mailSent)? –

+0

是的@MuliYulzary是正確的,你不需要''{}}'在'ng顯示' –

回答

2

語法不正確,試試這個:

<div ng-show="mailSent" class="pastille" ng-cloak=""></div> 
1

試試這個

<div ng-show="mailSent" class="pastille" ng-cloak=""></div> 

NG-展會將於true或false值。如果發送的郵件已設置「$ rootScope.mailSent = true;」。所以ng-show會得到真正的價值。不需要像這樣做比較。

希望這會爲你工作。

0

你不需要{{}}與NG-顯示試試這個:

<div ng-show="mailSent === true" class="pastille" ng-cloak=""></div> 
0

直接使用在$ rootScope場可能會引起很多麻煩。例如,如果我將他們的解決方案包裝在另一個具有ng-if指令的div中,所有解決方案都不起作用。

爲了確保不會發生使用中介字段和不要忘記來初始化它。由於它位於rootScope中,因此將其初始化爲angular.run塊。

最後:ng-show將表達式作爲參數no插值(括號)。

<div ng-show="mail.sent == true" class="pastille"></div> 
$rootScope.mail = {sent:false};// initialize this in the controller pass it to true when you have the condition met 
+0

爲什麼比較當它已經是一個布爾值? –

+0

只是一些東西我也使用角度和形式有一個失敗快,當我得到真或假的字符串,而不是布爾值:) – Walfrat

0

正如前面的答案指出的那樣,它似乎是一個範圍問題。如果您將$log附加到您的範圍,您可以在模板中調用它。這裏有一個漂亮的竅門:

<button data-ng-click="$log.log(put your model variable here)"></button> 

如果您添加到您的模板,那麼你可以點擊它,你會在什麼是變量裏面的控制檯中看到日誌。

如果您不使用controllerAs語法,我強烈建議您避免使用可變陰影。您可以在$routeProvider代碼中或在聲明控制器時在模板中執行此操作。

然後參考是scopeName.mailSent

然後您的按鈕應該是這樣的:

<button data-ng-click="scopeName.$log.log(scopeName.mailSent)"></button>