我正在关注亚当弗里曼的“Pro AngularJS”一书。但我坚持上市15-10。他提供的代码根本不起作用。
演示代码如下。它应该以下列方式工作:当我们点击按钮修改价格时,此列表必须自动更新。你能告诉我如何解决他的代码吗?我已经google了很多,但....
<!doctype html>
<html ng-app="exampleApp">
<head>
<script src="angular.js"></script>
<link rel="stylesheet" href="bootstrap.css"/>
<link rel="stylesheet" href="bootstrap-theme.css"/>
<script>
angular.module("exampleApp", [])
.controller('defaultCtrl', function ($scope) {
$scope.products = [
{name: "Apples", category: "Fruit", price: 1.20, expiry: 10},
{name: "Bananas", category: "Fruit", price: 2.42, expiry: 7},
{name: "Pears", category: "Fruit", price: 2.02, expiry: 6}
];
$scope.incrementPrices = function(){
for(var i=0; i< $scope.products.length; i++){
$scope.products[i].price += 1;
}
}
})
.directive("unorderedList", function () {
return function (scope, element, attrs) {
var data = scope[attrs["unorderedList"]];
var propertyExpression = attrs["listProperty"];
if (angular.isArray(data)) {
var listElem = angular.element("<ul>");
element.append(listElem);
for (var i = 0; i < data.length; i++) {
var itemElement = angular.element('<li>');
listElem.append(itemElement);
var watcherFn = function (watchScope) {
return watchScope.$eval(propertyExpression, data[i]);
}
scope.$watch(watcherFn, function (newValue, oldValue) {
itemElement.text(newValue);
});
}
}
}
})
</script>
</head>
<body ng-controller="defaultCtrl">
<div class="panel panel-default">
<div class="panel-heading">
<h3>Products</h3>
</div>
<div class="panel-body">
<button class="btn btn-primary" ng-click="incrementPrices()">Change prices</button>
</div>
<div class="panel-body">
<div unordered-list="products" list-property="price | currency"></div>
</div>
</div>
</body>
</html>
答案 0 :(得分:2)
继续阅读,在下一次捕获15-11时,他们会告诉前面的代码不起作用。
If you load the directives.html file into the browser, the directive won’t keep the li elements up-to-date. If you look
at the HTML elements in the DOM, you will see that the li elements don’t contain any content. This is a problem that
is so common that I want to demonstrate how to fix it even though it results from a JavaScript, rather than AngularJS,
feature.
这里的代码来自15-11,它增加了函数闭包 http://jsbin.com/ducihibahi/1/edit?html,output