我将此过滤器添加到我的角应用中,以从加载的数据中删除某些字符串:
.filter('cleanteam', function () {
return function (input) {
return input.replace('AFC', '').replace('FC', '');
}
});
<h2 class="secondary-title">{{teamDetails.name | cleanteam }}</h2>
您可以在此处看到错误:
http://alexanderlloyd.info/epl/#/teams/61
我的控制器看起来有点像这样:
.controller('teamController', function($scope, $routeParams, footballdataAPIservice) {
$scope.id = $routeParams.id;
$scope.team = [];
$scope.teamDetails = [];
//$scope.pageClass = '';
$scope.$on('$viewContentLoaded', function(){
$scope.loadedClass = 'page-team';
});
footballdataAPIservice.getTeam($scope.id).success(function (response) {
$scope.team = response;
});
footballdataAPIservice.getTeamDetails($scope.id).success(function (response) {
$scope.teamDetails = response;
});
})
出现这种情况的原因是什么?是因为teamDetails.name
未在ng-repeat循环中声明吗?
答案 0 :(得分:2)
通过查看您的代码,似乎您没有处理未定义的情况,而您的teamDetails.name
可能未定义undefined
,直到从服务中获取数据。
因为当您尝试通过ajax从服务获取数据时,您的输入变量是未定义的,当过滤器代码尝试在未定义的对象上应用.replace方法时,它将永远不会工作(.replace()
仅适用于字符串)< / p>
检查您的
teamDetails.name
对象是否定义是好的 想法,因为过滤器在每个digest
周期运行。
过滤强>
.filter('cleanteam', function () {
return function (input) {
return angular.isDefined(input) && input != null ? //better error handling
input.replace('AFC', '').replace('FC', ''):'';
}
});
希望这可以帮助你,谢谢。
答案 1 :(得分:0)
在我看来,在异步调用完成之前,过滤器正在尝试执行。
初始化控制器时尝试将teamDetails
设置为null,并使用ng-if
阻止在数据到达之前加载DOM元素:
$scope.id = $routeParams.id;
$scope.team = [];
$scope.teamDetails = null;
<h2 class="secondary-title" ng-if="teamDetails">{{teamDetails.name | cleanteam }}</h2>
这将确保在异步调用填充teamDetails
对象之前不会执行过滤器。