问题背景:
我正在学习AngularJS。我创建了一个简单的应用程序,它接受3个表单输入,并且在提交此表单时,应该呈现分页列表。我对UI-Bootstrap很依赖。这是一个Plnkr,显示了我尝试合并到我的应用中的分页示例:http://plnkr.co/edit/81fPZxpnOQnIHQgp957q?p=preview
问题&演示:
到目前为止,这是我在CodePen上的代码链接:
http://codepen.io/daveharris/pen/NNMQyy
我有一个1000个项目的列表,这些项目填充在我的SearchingService
模型上,并在两个控制器之间注入和共享。
当ng-repeat
模型上的searchingService.searchList
列表发生更改时,我无法填充分页SearchingService
,
就好像$scope.Watch
没有被触发一样。
非常感谢任何有助于深入了解的内容。
答案 0 :(得分:5)
将第31行从$watch
更改为$watchCollection
。由于您的服务正在改变数组(通过.push
),因此引用保持不变,因此$watch
不会触发。 $watchCollection
将观看对数组成员的引用,而不是对数组本身的引用。
答案 1 :(得分:1)
正如bchemy指出的,function dataURItoBlob(dataURI) {
// convert base64/URLEncoded data component to raw binary data held in a string
var byteString;
if (dataURI.split(',')[0].indexOf('base64') >= 0)
byteString = atob(dataURI.split(',')[1]);
else
byteString = unescape(dataURI.split(',')[1]);
// separate out the mime component
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
// write the bytes of the string to a typed array
var ia = new Uint8Array(byteString.length);
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
return new Blob([ia], {type:mimeString});
}
应更改为var dataURL = canvas.toDataURL('image/jpeg', 0.5);
var blob = dataURItoBlob(dataURL);
var fd = new FormData(document.forms[0]);
fd.append("canvasImage", blob);
。但是这种变化不足以让你的应用程序正常使用你当前的代码,因为分页看起来很糟糕。
您还应该添加另一个观察程序来控制分页,作为您要复制的示例中的分页:
$watch
$watchCollection
数组中的$scope.$watch('currentPage + numPerPage', function() {
var begin = (($scope.currentPage - 1) * $scope.numPerPage)
, end = begin + $scope.numPerPage;
$scope.filteredItems = $scope.searchingService.searchList.slice(begin, end);
});
数组也会重复$scope.items
,这会使分页长度变得混乱。
我创建了这个Plunker,您可以在其中看到您的示例完全正常工作。