AngularJS:ng-show ="user"falsey,ng-show ="!! user"truthy?

 xiuhuashuai 发布于 2023-01-30 14:25

我有一个当前范围的用户,由我当前的控制器设置.

$scope.user = user;

根据这个用户的存在选择性地显示/隐藏一个不能正常工作,而是抛出异常.

不起作用: ng-show="user"

...

作品: ng-show="!!user"

...

发生了ng-show什么导致ng-show="user"不真实?

我使用的angular.1.2.6是https://ajax.googleapis.com/ajax/libs/angularjs/1.2.6/angular.min.js

抛出异常:

如果我使用ng-show="user",那么我在我的控制台中得到以下异常:

TypeError: Cannot convert object to primitive value
    at Ma (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.6/angular.min.js:14:240)
    at Object. (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.6/angular.min.js:185:464)
    at Object.applyFunction [as fn] (:778:50)
    at h.$digest (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.6/angular.min.js:99:211)
    at h.$delegate.__proto__.$digest (:844:31)
    at https://ajax.googleapis.com/ajax/libs/angularjs/1.2.6/angular.min.js:101:256
    at e (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.6/angular.min.js:33:182)
    at https://ajax.googleapis.com/ajax/libs/angularjs/1.2.6/angular.min.js:36:378 

我使用时,此错误消失 ng-show="!!user"

用户对象:

这是以下user对象$scope:

{
  "state": "",
  "access_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "token_type": "Bearer",
  "expires_in": "3600",
  "code": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "scope": "https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/plus.moments.write https://www.googleapis.com/auth/plus.me https://www.googleapis.com/auth/plus.profile.agerange.read https://www.googleapis.com/auth/plus.profile.language.read https://www.googleapis.com/auth/plus.circles.members.read",
  "id_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "authuser": "0",
  "session_state": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "prompt": "none",
  "client_id": "xxxxxxxxxxx.apps.googleusercontent.com",
  "g_user_cookie_policy": "single_host_origin",
  "cookie_policy": "single_host_origin",
  "response_type": "code token id_token gsession",
  "issued_at": "1391059385",
  "expires_at": "1391062985",
  "_aa": "0",
  "status": {
    "google_logged_in": true,
    "signed_in": true,
    "method": "AUTO"
  }
}

dimirc.. 6

请记住,ngShow期望一个表达式进行评估,并使用此函数将其"转换"为Boolean:

function toBoolean(value) {
  if (typeof value === 'function') {
    value = true;
  } else if (value && value.length !== 0) {
    var v = lowercase("" + value);
    value = !(v == 'f' || v == '0' || v == 'false' || v == 'no' || v == 'n' || v == '[]');
  } else {
    value = false;
  }
  return value;
}

https://github.com/angular/angular.js/blob/834d316829afdd0cc6a680f47d4c9b691edcc989/src/Angular.js#L962

所以你不应该只使用一个对象.你可以继续使用!!user或者也许user.someattr

1 个回答
  • 请记住,ngShow期望一个表达式进行评估,并使用此函数将其"转换"为Boolean:

    function toBoolean(value) {
      if (typeof value === 'function') {
        value = true;
      } else if (value && value.length !== 0) {
        var v = lowercase("" + value);
        value = !(v == 'f' || v == '0' || v == 'false' || v == 'no' || v == 'n' || v == '[]');
      } else {
        value = false;
      }
      return value;
    }
    

    https://github.com/angular/angular.js/blob/834d316829afdd0cc6a680f47d4c9b691edcc989/src/Angular.js#L962

    所以你不应该只使用一个对象.你可以继续使用!!user或者也许user.someattr

    2023-01-30 14:29 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有