我是日本學生。所以我的英語不容易閱讀。對不起。AngularJS將變量綁定到與變量相關的數組
我使用AngularJS製作了素數列表。用戶輸入兩個值,valFrom和valTo。該列表由兩個數字構成。
我想將輸入值綁定到列表。當我輸入輸入時,列表會動態改變值。但事實並非如此。當我輸入輸入時,列表不會改變。我想將這些值綁定到列表中。
以下是我所做的。值不會被排序,因爲使用了Object而不是Array。
這是index.html。
<!doctype html>
<html lang="ja" ng-app="MYAPP">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0-rc.2/angular.min.js"> </script>
<script src="script.js"></script>
</head>
<body>
<div ng-controller="inputCtrl">
<h1>Make prime number list from {{fromVal}} to {{toVal}}</h2>
<input type="number" ng-model="fromVal"><br>
<input type="number" ng-model="toVal"><br>
<!-- prime numbers list -->
<div ng-controller="primeListCtrl">
<div ng-repeat="(val, flag) in primeFlags">
{{val}}</td><td>{{flag==true? "is prime": "isn't prime"}}
</div>
</div>
</div>
</body>
的script.js
angular.module('MYAPP', []).
controller('inputCtrl', function($scope){
$scope.fromVal = 10;
$scope.toVal = 50;
}).
controller('primeListCtrl', function($scope){
/*
If primeFlags[i + ""] is true, i is prime number.
Keys are string, values are boolean.
*/
$scope.primeFlags = {};
// fill with true
for(var i = 2; i <= $scope.toVal; i++){
$scope.primeFlags[i+""] = true;
}
// set false
for(var i = 2; i <= $scope.toVal; i++){
for(var j = 2; j < i; j++){
if(i%j === 0){
$scope.primeFlags[i+""] = false;
break;
}
}
}
});
我想,爲什麼輸入值不綁定到列表中的原因是primeFlags不會改變。當輸入值更改時,primeFlags未更改。所以,列表不會更新。
我在想兩個解決方案。首先,使用$ scope來觀察輸入值。$ watch()。其次,使用$ broadcast()和$ on()來觀察輸入值。當值改變時,重拍primeFlags。但是,我認爲解決方案並不好。有更好的解決方案嗎?
>>您的素數列表是否完全動態?不,謝謝你,我有新的想法。我知道$ scope中的一些函數被調用,如果有什麼更改的話。 – redstone 2014-09-24 11:16:11