根据更改$ rootScope变量值显示div

时间:2016-04-27 13:15:47

标签: angularjs

我想每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。 我错过了什么吗?

5 个答案:

答案 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>