【问题标题】:AngularJS creating new $scope that subtracts two $scopes consumed from a JSON arrayAngularJS 创建新的 $scope,从 JSON 数组中减去消耗的两个 $scope
【发布时间】:2015-11-01 05:48:06
【问题描述】:

我对 AngularJS 和编程非常陌生,我确信这是一个基本问题,但我很难找到我们的资源,以实现从 JSON 文件 ($scope.carrierDiff) 中减去两个消耗的 $scope 值)。我将不胜感激您能提供的任何帮助。

<!doctype html>
<html ng-app="MyApp">
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<script src="Scripts/angular.min.js"></script>
</head>
<body >
    <div ng-controller="SiteCtrl">
        <ul ng-repeat="site in sites">
            <li>{{site.ID}}</li>
            <li>{{carrierDiff}}</li>
       </ul>
    </div></body>
<script>
    var app = angular.module("MyApp", []);
        app.controller("SiteCtrl", function($scope, $http) {
            $http.get('JSON/getsamplesitesCopy.json').
            success(function(data, status, headers, config) {   
                $scope.sites = data;
            $scope.carrierDiff = $scope.sites.Carrier - $scope.sites.Carrier2;
}).
error(function(data, status, headers, config) {
// log error
});
});
</script>
</html>

【问题讨论】:

  • 您写信给 $scope.sites,但您正在对 $scope.data 进行计算。它是哪一个?我认为这是你的问题。
  • Carrier 是整数还是字符串?请提供 getsamplesitesCopy.json 的结构或创建 JSFiddle.net 项目,以便我们看到您的问题的重现。
  • 它应该是 $scope.sites @dman2306。我更正了,但我仍然没有得到 {{carrierDiff}} 的结果,我收到的错误是:TypeError: Cannot read property 'Carrier' of undefined.
  • @BrianGerhards Carrier 和 Carrier2 都是整数
  • Cannot read property 'Carrier' of undefined 本质上是在说$scope.sites === undefined。只有当您没有数据,或者此代码不是正在使用的实际代码时,才会发生这种情况。

标签: arrays json angularjs scope


【解决方案1】:

这个不用单独计算

$scope.carrierDiff = $scope.sites.Carrier - $scope.sites.Carrier2;

你只需要这样做......

<body >
    <div ng-controller="SiteCtrl">
        <ul ng-repeat="site in sites">
            <li>{{site.ID}}</li>
            <li>{{site.Carrier - site.Carrier2}}</li>
       </ul>
    </div>
</body>

【讨论】:

  • 谢谢。不敢相信事情就这么简单。我确实有一个后续问题,我会尽快添加。
【解决方案2】:

由于我对从您正在检索的文件中返回的内容了解有限,您似乎错误地引用了 JSON 数据。您需要引用 $scope.sites 或数据,而不是两者的破解版本。如果数据的结构是这样的:

data = {Carrier: 5, Carrier: 4}

然后你会像这样引用 Carrier:

data.Carrier1

因此,当您将数据移动到 $scope.sites 时,您是在引用数据中的 JSON,它会被引用,而无需指出它来自数据

$scope.sites.Carrier1

所以你的代码应该是这样的: http://plnkr.co/edit/nnfewy?p=preview

<!doctype html>
<html ng-app="MyApp">
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<script src="Scripts/angular.min.js"></script>
</head>
<body >
    <div ng-controller="SiteCtrl">
        <ul ng-repeat="site in sites">
            <li>{{site.ID}}</li>
            <li>{{carrierDiff}}</li>
       </ul>
    </div>
<script>
    var app = angular.module("MyApp", []);
        app.controller("SiteCtrl", function($scope, $http) {
            $http.get('JSON/getsamplesitesCopy.json').
            success(function(data, status, headers, config) {   
                $scope.sites = data;
            $scope.carrierDiff = $scope.sites.Carrier - $scope.sites.Carrier2;
}).
error(function(data, status, headers, config) {
// log error
});
});
</script>
</body>
</html>

另一个要记住的项目,您应该将&lt;script&gt; 放在头部或身体中,而不是在外面。见上面代码中的修改。

【讨论】:

  • 感谢布赖恩的回答。我意识到您添加了 Carrier 和 Carrier2 的值,但在您的回答中,我总是会得到两个的结果吗?还是对 JSON 中的 Carrier 和 Carrier2 的值是动态的?
  • 根据您的问题,您问为什么添加数字不起作用,而不是如何使这些数字在输出中动态化。您可以通过将&lt;li&gt;{{carrierDiff}}&lt;/li&gt; 替换为&lt;li&gt;{{site.Carrier - site.Carrier2}}&lt;/li&gt; 来引用输出中的数字,即如果您在JSON 结构中的每个对象中都有CarrierCarrier2
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 2014-05-11
  • 1970-01-01
  • 2017-10-31
相关资源
最近更新 更多