【问题标题】:AngularJS ng-show and ng-hide doesn't workAngularJS ng-show 和 ng-hide 不起作用
【发布时间】:2015-06-29 23:40:03
【问题描述】:

这里的 angularjs 逻辑有问题

我只想在没有用户登录的情况下显示登录链接,并且只显示登录用户的注销链接,但它不能正常工作

我的 HTML

 <section ng-controller="a" ng-show="auth = false">
    <a href="#/signin" ng-click="signin()"> Sign in </a>
 </section>

 <section ng-controller="b" ng-show="auth = true">
    <a href="#/signout" ng-click="signout()"> Sign out </a>
 </section>

登录正常

这是我的控制器

登录控制器

 function ($scope, Service){
 $scope.auth = true;
 $scope.signin = function($event, userID, passwd){ 

                 Service.signin(userID,passwd).then( 
                        function (response){
                            $scope.auth = true; 
                  });
 }]).

注销控制器

  function ($scope, Service){
  $scope.auth = false; 
  $scope.signout = function($event){ 
                 Service.signout().then( 
                        function (response){
                            $scope.auth = false;    
                  });
  }]).

这两个注销和登录链接基本上都在我的主页中。我不想创建很多页面,因此我想互相隐藏。当用户单击登录链接时,它将运行 angularjs 路由器,在这种情况下是 /login,表单还有另一个 templateURL,它将直接附加到主页。一旦用户输入了用户名和密码,用户需要点击提交按钮,这是代码

<form role="form" name="form1">
    <label for"userID">UserID</label><input type="text" id="userID" ng-model="userID">
    <label for"passwd">Password</label><input type="text" id="passwd" ng-model="passwd">
    <button data-ng-click="signin($event,userID,passwd); reload()">Login</button>

reload() 函数会直接刷新页面。我正在使用 $window.location.reload()

【问题讨论】:

  • 试试这个ng-show="auth"ng-show="!auth"
  • 不起作用,先生。这个我试过了
  • 我认为他们两个都可以是ng-show="auth"。然后如果该语句为真则显示,如果为假则隐藏
  • 你有两个不同的 $scope 使它成为 $root '
  • 我在我的服务中使用 http.get 先生

标签: javascript angularjs


【解决方案1】:

你的equals比较不正确。

这是为 auth 分配一个 false 值:

ng-show="auth = false"

你想要的是这个(双等​​号和三等号比较)

ng-show="auth === false"

您也可以这样做:

<section ng-controller="a" ng-show="!auth">
    <a href="#/signin" ng-click="signin()"> Sign in </a>
 </section>

 <section ng-controller="b" ng-show="auth">
    <a href="#/signout" ng-click="signout()"> Sign out </a>
 </section>

【讨论】:

  • 当然,我只是想说明一个单一的等于是一个赋值运算符。
  • 先生,它不工作。我在控制器中将条件设置为 auth = false 和 auth=true,对吗?
  • 不,看我的回答。单个等号是赋值运算符。双等号和三等号进行比较。使用我示例的后半部分,我在 ng-show 中使用 !auth 和 auth
  • 当我使用!auth和auth时,在没有用户登录的情况下,登录和注销链接完全不显示
  • 你能发一下这个小提琴吗?
【解决方案2】:

实际上你需要两个作品来完成这个任务

第一个作品:-

您需要在$rootScope 而不是$scope 中分配auth 变量。 因为这个对象用在两个控制器中。

喜欢

function ($scope, dataService, $rootScope){
 $scope.auth = true;
 $scope.signin = function($event, userID, passwd){ 

                 Service.signin(userID,passwd).then( 
                        function (response){
                            $rootScope.auth = true; 
                  });
 }]).

第二个工作:

您需要将ng-show="auth = false" 更改为ng-show="auth === false"。您已经使用了单等号。 应该是 doubletriple 相等

如果您在 $rootScope 中分配了对象,那么您不需要检查元素中的条件是真还是假。因为您已经在控制器中定义 auth 为 false 或 true。所以你只能打电话给ng-show="auth

【讨论】:

  • 仍然无法正常工作,先生,我已经尝试了所有的建议。基本上用户点击链接后该功能正常工作,有什么问题吗?当我使用双重或三重相等时,两个链接都不会显示
  • 我认为你的问题是你的链接按钮没有 angularjs,就像你的主屏幕一样?正确的?你的主屏幕也没有任何控制器吗?
  • 我已经编辑了信息先生。请看一下
  • 先生,我在我的服务中使用 http 调用。有问题吗?
【解决方案3】:

试试下面的

ng-show="auth"

请让我知道它是否仍然无法正常工作..

【讨论】:

  • 不工作先生,当有用户登录时,不显示注销链接,但登录链接是
  • var a = true; 你可以用if(a === true) 来检查它是否属实,或者if(a)if(a) 是真实存在的简写。如果要检查 a 是否为假,可以使用 if(a === false) 或简写 if(!a)。所以if(a)会执行if里面的代码,if(!a)不会,因为a不是假的。
猜你喜欢
  • 2014-12-08
  • 2014-03-27
  • 2016-10-18
  • 2015-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-22
相关资源
最近更新 更多