ng-show 不评估表达式

ng-show does not evaluate expression

我是 Angularjs 的新手,正在通过做一些任务来练习。在这里,我在控制器中创建一个对象,并在我的网页中创建对象值。但是这里 ng-show 不计算下面的表达式。但是如果我在控制器中创建一个变量 $scope.ngshow = false; 它将起作用。请帮助我为什么下面的代码不起作用。

<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<body>

<div ng-app="myApp" ng-controller="myCtrl">
<ul>

<li ng-show = "a.name"> Name {{a.name}} </li>
<li ng-show = "a.id"> Id  {{a.id}}</li>
<li ng-show = "a.address"> Address  {{a.address}}</li>
</ul>
</div>

<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
    $scope.a = {
    'name' : 'false',
    'id' : 'true',
    'address' : 'false'
    };
});
</script>

<p>ng-show didnt accept expressions.</p>

</body>
</html>

感谢您的宝贵时间。

您不应使用 truefalse 作为字符串

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
    $scope.a = {
    'name' : false,
    'id' : true,
    'address' : false
    };
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>

<div ng-app="myApp" ng-controller="myCtrl">
<ul>

<li ng-show = "a.name"> Name {{a.name}} </li>
<li ng-show = "a.id"> Id  {{a.id}}</li>
<li ng-show = "a.address"> Address  {{a.address}}</li>
</ul>
</div>

<script>

</script>

<p>ng-show didnt accept expressions.</p>

只需删除 truefalse 中的单引号。如果你在 truefalse 上加上引号,它们是 strings.In 这种情况 ng-show 正在检查变量是否已定义或 not.In 你的情况,因为它有字符串 true/false 值,ng-show 正在考虑定义的表达式因此为真。

<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>

<body>

  <div ng-app="myApp" ng-controller="myCtrl">
    <ul>

      <li ng-show="a.name"> Name {{a.name}} </li>
      <li ng-show="a.id"> Id {{a.id}}</li>
      <li ng-show="a.address"> Address {{a.address}}</li>
    </ul>
  </div>

  <script>
    var app = angular.module('myApp', []);
    app.controller('myCtrl', function($scope) {
      $scope.a = {
        'name': false,
        'id': true,
        'address': false
      };
    });
  </script>

  <p>ng-show didnt accept expressions.</p>

</body>

</html>

嗯,看来是版本冲突。 angular ng 的此版本 1.4.8 将支持值显示为布尔值而不是字符串布尔值。因此,您需要删除值

周围的引号
$scope.a = {
        'name' : false,
        'id' : true,
        'address' : false
        };

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
    $scope.a = {
    'name' : false,
    'id' : true,
    'address' : false
    };
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>

<div ng-app="myApp" ng-controller="myCtrl">
<ul>

<li ng-show = "a.name"> Name {{a.name}} </li>
<li ng-show = "a.id"> Id  {{a.id}}</li>
<li ng-show = "a.address"> Address  {{a.address}}</li>
</ul>
</div>

但是,如果您使用的是 1.2.23 等较低版本,则 angular 将字符串值识别为布尔值(如果值为 true 或 false

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
    $scope.a = {
    'name' : 'false',
    'id' : 'true',
    'address' : 'false'
    };
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="myCtrl">
<ul>

<li ng-show = "a.name"> Name {{a.name}} </li>
<li ng-show = "a.id"> Id  {{a.id}}</li>
<li ng-show = "a.address"> Address  {{a.address}}</li>
</ul>
</div>