我想每10秒进行一次http调用,然后在rootScope.mailSent等于true时显示div。电话很好。
在我的控制器中我做到了:
$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 :(得分:2)
语法错误,请尝试:
<div ng-show="mailSent" class="pastille" ng-cloak=""></div>
答案 1 :(得分:1)
试试这个
<div ng-show="mailSent" class="pastille" ng-cloak=""></div>
ng-show将采用真值或假值。如果发送邮件,则设置“$ rootScope.mailSent = true;”。所以ng-show将获得真正的价值。不需要像这样进行比较。
希望这对你有用。
答案 2 :(得分:0)
使用ng-show不需要{{}}
试试这个:
<div ng-show="mailSent === true" class="pastille" ng-cloak=""></div>
答案 3 :(得分:0)
直接使用$ rootScope下的字段可能会造成很多麻烦。例如,如果我将解决方案包装在另一个具有ng-if
指令的div中,则所有给出的解决方案都不会起作用。
为了确保不会发生使用中间字段并且不要忘记来初始化它。因为它在rootScope中在angular.run
块中初始化它。
最后:ng-show将表达式作为参数无插值(括号)。
<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
答案 4 :(得分: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>