Причина заключается в том, что после изменения входа $scope.listItems
является строкой, так как тип ввода является текст. Измените его на номер, и все будет работать. Работа plunker: http://jsfiddle.net/yv0z9q8L/
<input type="number" name="red" ng-model="listItems" onchange="angular.element(this).scope().newTotal()">
Также обратите внимание, что вам не нужно onchange
атрибут вообще здесь, однако я не уверен, является ли это хорошая вещь. Использование функции in для ng-repeat довольно опасно, если вы не знаете, что делаете, поскольку эта функция будет вызываться в каждом цикле дайджеста. Если вы планируете перебирать большой набор данных, это в значительной степени убьет вашу производительность.
Лично я предпочел бы пойти с:
<div ng-app="myapp">
<div ng-controller="ctrlParent">
<input type="number" name="red" ng-model="itemCount">
<ul>
<li ng-repeat="i in items track by $index"><span>{{$index+1}}</span></li>
</ul>
</div>
</div>
var app = angular.module('myapp',[]);
app.controller('ctrlParent',function($scope){
$scope.$watch('itemCount', function(val) {
$scope.items = Array.new(val)
});
$scope.itemCount = 10;
});
plunker: http://jsfiddle.net/m1zq3zqv/1/