[英]Angular js curly brackets displayed as text
I'm trying to do a simple function in my angular js trial. 我正在尝试在我的angular js试用版中做一个简单的功能。
I cannot get the method call to work, it only displays it all as text. 我无法使方法调用起作用,它只能将其全部显示为文本。 I cannot figure out what I have done wrong in such a small thing.
我无法弄清楚在这么小的事情上我做错了什么。
This is my entire code and below is a screenshot of the result. 这是我的全部代码,下面是结果的屏幕截图。
The html HTML
<!DOCTYPE html>
<html>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<script src="app.js"></script>
<body ng-app="beerApp">
<div ng-controller="contentC">
<div>
<ul>
<select ng-model="currentItem" ng-options="item.name for item in items"></select>
</ul>
</div>
<div>
<p>{{ currentItem.name }}</p>
<p>{{ currentItem.country }}</p>
<p>{{ average(currentItem.ratings) }}</p>
<p ng-repeat="rating in currentItem.ratings">{{ rating.rating }}</p>
</div>
</div>
The js 的js
var app = angular.module('beerApp', []);
app.controller('contentC', function($scope) {
$scope.items = [
{name:'Rignes',country:'Norway', ratings:[
{"rating":3}, {"rating":3}, {"rating":2}]},
{name:'Pripps',country:'Sweden', ratings:[
{"rating":2}, {"rating":3}, {"rating":5}]},
{name:'Tuborg',country:'Denmark', ratings:[
{"rating":5}, {"rating":4}, {"rating":3}]}
];
$scope.currentItem = {name:'Nothing'};
$scope.average = function (data) {
console.log("called")
var sum = 0;
for(var i = 0; i < data.lenght; i++){
sum += parseInt(data[i].rating);
}
var avg = sum/data.lenght;
return avg;
};
});
curly brackets displayed 大括号显示
Corrected js code 更正的js代码
$scope.average = function (data) {
var sum = 0;
var ratings = 0;
try {
for (var d in data){
sum += parseInt(data[d].rating);
ratings++;
}
} catch (error) {
sum = 0;
}
var avg = sum/ratings;
return avg;
};
The average
function is throwing an error so Angular is leaving the binding as-is because there's no sensible value to bind to it. average
函数抛出错误,因此Angular保持绑定不变,因为没有有意义的值绑定到它。
There are a couple of errors in your code: 您的代码中有几个错误:
length
is spelt incorrectly length
拼写错误 data.ratings.length
rather than data.length
data.ratings.length
而不是data.length
currentItem
does not have a ratings property. currentItem
没有等级属性。 Working demo http://codepen.io/anon/pen/reqbZG 工作演示http://codepen.io/anon/pen/reqbZG
var app = angular.module('beerApp', []);
app.controller('contentC', function($scope) {
$scope.items = [
{name:'Rignes',country:'Norway', ratings:[
{"rating":3}, {"rating":3}, {"rating":2}]},
{name:'Pripps',country:'Sweden', ratings:[
{"rating":2}, {"rating":3}, {"rating":5}]},
{name:'Tuborg',country:'Denmark', ratings:[
{"rating":5}, {"rating":4}, {"rating":3}]}
];
$scope.currentItem = {name:'Nothing', ratings: []};
$scope.average = function (data) {
var sum = 0;
for(var i = 0; i < data.ratings.length; i++){
sum += parseInt(data.ratings[i].rating);
}
var avg = sum/data.ratings.length;
return avg;
};
});
And the slightly updated HTML (average method call): 以及稍微更新的HTML(平均方法调用):
<!-- snip -->
<p>{{ currentItem.name }}</p>
<p>{{ currentItem.country }}</p>
<p>{{average(currentItem)}}</p>
<p ng-repeat="rating in currentItem.ratings">{{ rating.rating }</p>
<!-- snip -->
Change 更改
<p>{{average()}}</p>
For 对于
<p>{{average(items)}}</p>
Also, try checking your console (ctrl+shift+i) 另外,请尝试检查您的控制台(ctrl + shift + i)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.