为什么 Angularjs Material 卡片在视图更改时被推到内容下方?
Why are the Angularjs Material Cards being pushed below the content on a view change?
我有一个页面,在视图更改后访问时,内容被添加到页面底部,而不是用新内容重新填充视图。这仅发生在带有 AngularJS Material 设计指令特别是卡片的页面上。所有其他指令都可以毫不犹豫地工作。如果指令从此页面中删除,则视图将更改状态,而内容不会按应有的方式添加到页面底部。
我的目录页面上也出现以下错误:错误:[$rootScope:infdig] 10 $digest() iterations reached。中止!
我是否需要另一种方式来编写此服务以防止这种情况发生?这是我的目录页面被推到另一个页面底部的原因吗?
可以在此处找到它的示例:https://www.dropbox.com/s/tiohab2dm4gzhcx/angular-issue.png?dl=0
===目录控制器===
angular.module('main').controller('directory', ['$scope', 'rows', function($scope, rows){
$scope.imagePath = 'http://lorempixel.com/250/250/business/';
$scope.people = [
{
name: 'asdfasdf',
dept: 'asdf',
desc: 'asdfasdf',
phone: '33333333',
email: 'adsfasdf@asdf.com',
photo: 'something.jpg'
}
$scope.chunked = function(){
return rows($scope.people, 3);
}
=== 行服务 ===
angular.module('main').factory('rows', function()
{
return function(objects, num)
{
var newArr = [];
for (var i=0; i<objects.length; i+=num) {
newArr.push(objects.slice(i, i+num));
}
return newArr;
}
});
=== HTML ===
<div class="container-fluid">
<div class="container" ng-controller="directory" id="directory">
<h1>Directory</h1>
<div class="row" ng-repeat="people in chunked()">
<div class="col-sm-4" ng-repeat="person in people">
<md-card md-theme="{{ showDarkTheme ? 'dark-purple' : 'default' }}" md-theme-watch="">
<md-card-title>
<md-card-title-text>
<span class="md-headline">{{person.name}}</span>
<span class="md-subhead">{{person.dept}}</span>
<span class="md-subhead">{{person.desc}}</span>
</md-card-title-text>
</md-card-title>
<md-card-actions layout="row" layout-align="end center">
<md-button class="md-fab md-mini md-primary" aria-label="Favorite" href="mailto: {{person.phone}}">
<md-icon class="material-icons">phone</md-icon>
</md-button>
<md-button class="md-fab md-mini md-primary" aria-label="Settings" href="mailto: {{person.email}}">
<md-icon class="material-icons">email</md-icon>
</md-button>
</md-card-actions>
</md-card>
</div>
</div>
</div>
</div>
===路线===
angular.module('main').config(['$routeProvider',
function($routeProvider)
{
$routeProvider.
when('/:paramB',
{
templateUrl: function(params)
{
params.paramB = params.paramB.replace(':', '');
return "/pages/" + params.paramB;
}
}).when('/', {
templateUrl: function(){
return '/home.asp'
}
})
}
]);
尝试从您的工厂返回对象,而不是函数,如下所示:
angular.module('main').factory('rows', function()
{
return {
calculate: function(objects, num)
{
var newArr = [];
for (var i=0; i<objects.length; i+=num) {
newArr.push(objects.slice(i, i+num));
}
return newArr;
}
};
});
然后像这样使用它:return rows.calculate($scope.people, 3);
这确实是 ng-repeat 的问题。如果有迭代器警告,那么这会影响视图状态。解决方案是通过利用以下内容来防止此错误。除了创建 factory/service 之外,这是很长的路要走,但是这满足 Angular。
<div class="row" ng-repeat="person in people" ng-if="$index % 3 == 0">
<div class="col-sm-4">{{people[$index].name}}</div>
<div class="col-sm-4">{{people[$index + 1].name}}</div>
<div class="col-sm-4">{{people[$index + 2].name}}</div>
</div>
我有一个页面,在视图更改后访问时,内容被添加到页面底部,而不是用新内容重新填充视图。这仅发生在带有 AngularJS Material 设计指令特别是卡片的页面上。所有其他指令都可以毫不犹豫地工作。如果指令从此页面中删除,则视图将更改状态,而内容不会按应有的方式添加到页面底部。
我的目录页面上也出现以下错误:错误:[$rootScope:infdig] 10 $digest() iterations reached。中止! 我是否需要另一种方式来编写此服务以防止这种情况发生?这是我的目录页面被推到另一个页面底部的原因吗?
可以在此处找到它的示例:https://www.dropbox.com/s/tiohab2dm4gzhcx/angular-issue.png?dl=0
===目录控制器===
angular.module('main').controller('directory', ['$scope', 'rows', function($scope, rows){
$scope.imagePath = 'http://lorempixel.com/250/250/business/';
$scope.people = [
{
name: 'asdfasdf',
dept: 'asdf',
desc: 'asdfasdf',
phone: '33333333',
email: 'adsfasdf@asdf.com',
photo: 'something.jpg'
}
$scope.chunked = function(){
return rows($scope.people, 3);
}
=== 行服务 ===
angular.module('main').factory('rows', function()
{
return function(objects, num)
{
var newArr = [];
for (var i=0; i<objects.length; i+=num) {
newArr.push(objects.slice(i, i+num));
}
return newArr;
}
});
=== HTML ===
<div class="container-fluid">
<div class="container" ng-controller="directory" id="directory">
<h1>Directory</h1>
<div class="row" ng-repeat="people in chunked()">
<div class="col-sm-4" ng-repeat="person in people">
<md-card md-theme="{{ showDarkTheme ? 'dark-purple' : 'default' }}" md-theme-watch="">
<md-card-title>
<md-card-title-text>
<span class="md-headline">{{person.name}}</span>
<span class="md-subhead">{{person.dept}}</span>
<span class="md-subhead">{{person.desc}}</span>
</md-card-title-text>
</md-card-title>
<md-card-actions layout="row" layout-align="end center">
<md-button class="md-fab md-mini md-primary" aria-label="Favorite" href="mailto: {{person.phone}}">
<md-icon class="material-icons">phone</md-icon>
</md-button>
<md-button class="md-fab md-mini md-primary" aria-label="Settings" href="mailto: {{person.email}}">
<md-icon class="material-icons">email</md-icon>
</md-button>
</md-card-actions>
</md-card>
</div>
</div>
</div>
</div>
===路线===
angular.module('main').config(['$routeProvider',
function($routeProvider)
{
$routeProvider.
when('/:paramB',
{
templateUrl: function(params)
{
params.paramB = params.paramB.replace(':', '');
return "/pages/" + params.paramB;
}
}).when('/', {
templateUrl: function(){
return '/home.asp'
}
})
}
]);
尝试从您的工厂返回对象,而不是函数,如下所示:
angular.module('main').factory('rows', function()
{
return {
calculate: function(objects, num)
{
var newArr = [];
for (var i=0; i<objects.length; i+=num) {
newArr.push(objects.slice(i, i+num));
}
return newArr;
}
};
});
然后像这样使用它:return rows.calculate($scope.people, 3);
这确实是 ng-repeat 的问题。如果有迭代器警告,那么这会影响视图状态。解决方案是通过利用以下内容来防止此错误。除了创建 factory/service 之外,这是很长的路要走,但是这满足 Angular。
<div class="row" ng-repeat="person in people" ng-if="$index % 3 == 0">
<div class="col-sm-4">{{people[$index].name}}</div>
<div class="col-sm-4">{{people[$index + 1].name}}</div>
<div class="col-sm-4">{{people[$index + 2].name}}</div>
</div>