【发布时间】:2014-02-18 10:32:33
【问题描述】:
我正在开发一个移动应用程序,但在将数据传输到控制器时遇到了问题。我所做的是我从服务中获取数据并且效果很好(路由时这是'/'或根目录):
var listdnModule = angular.module('listdn', []);
listdnModule.factory('getActiveDnService', ['$http', function ($http) {
return {
getActiveDnSvc: function (izvajalecID) {
return $http({ method: 'POST', url: 'svc.aspx/getActiveDN', data: "{'izvajalecID':" + "'" + izvajalecID + "'}", cache: true });
}
};
}]);
listdnModule.controller('listdnCtrl', ['$scope', '$http', 'getActiveDnService','$rootScope', function ($scope, $http, svc, $rootScope) {
$scope.mjav = 1;
svc.getActiveDnSvc($scope.mjav).success(function (data) {
$rootScope.dnlist = data.d;
$scope.listdn = data.d;
});
}]);
所以这很好用。它将数据设置到 rootScope 和 localscope 并从本地范围读取。
然后我将 Costumers 列表链接到costumerdetail。路由设置是这样的:
mSvc.config(['$routeProvider',
function ($routeProvider) {
$routeProvider.
when('/', {
templateUrl: 'tmpl/listdn.html',
controller: 'listdnCtrl'
}).
when('/settings', {
templateUrl: 'tmpl/nastavitve.html',
controller: 'settings'
}).
when('/dndetail/:dnid', {
templateUrl: 'tmpl/dndetail.html',
controller: 'dndetailCtrl'
}).
otherwise({
redirectTo: '/'
});
}]);
在我尝试获取 dndetail 之后出现错误。我从 $routeParams 获得了正确的 ID,但我没有在正确的时间获得数据。代码是这样的:
var dndetail = angular.module('dndetail', []);
dndetail.controller('dndetailCtrl', ['$rootScope', '$scope', '$routeParams', function ($rootScope, $scope, $routeParams) {
console.log($rootScope.dnlist[0]);
$scope.datal = $rootScope.dnlist;
$scope.id = $routeParams.dnid;
for(var i = 0; i <= datal.length; i++) {
if (datal[i].ID === $scope.id) {
$scope.data = datal[i];
}
}
}]);
这是我得到的错误:
如您所见,console.log 获取对象并打印输出(我将其屏蔽,因为它是公司数据),而 datal 未定义。 chrome DevTools 中特殊的 AngularJS 选项卡也显示数据存在:
最后是没有获取数据的视图模板:
<ul ng-controller="dndetailCtrl" class="list-group">
<li class="list-group-item">
<div class="row info-row-li">
<div class="pull-left">Naslov</div>
<div class="pull-right">
<a ng-href="https://maps.google.com/?q={{ data.Ulica }} {{ data.Posta }} {{ data.Kraj }}">
{{ $root.dnlist[1].Ulica }}<br />
{{ data.Posta }} {{ data.Kraj }}<br />
{{ data.Drzava }}</a>
</div>
</div>
</li>
<li class="list-group-item">
<div class="row info-row-li">
<div class="pull-left">Datum izvedbe</div>
<div id="kupec-pe" class="pull-right">{{ data.DatumIzvedbe }}</div>
</div>
</li>
<li class="list-group-item">
<div class="row info-row-li">
<div class="pull-left">Datum naloga</div>
<div id="kupec-dst" class="pull-right">{{ data.DatumNaloga }}</div>
</div>
</li>
<li class="list-group-item">
<div class="row info-row-li">
<div class="pull-left">Opis:</div>
<div id="kupec-komerc" class="pull-right">{{ data.Opis }}</div>
</div>
</li>
<li class="list-group-item">
<div class="row info-row-li">
<div class="pull-left">Šifra dejavnosti:</div>
<div id="kupec-sif" class="pull-right">{{ data.sifDej }}</div>
</div>
</li>
<li class="list-group-item">
<div class="row info-row-li">
<div class="pull-left">Šifra dejavnosti:</div>
<div id="Div1" class="pull-right">{{ data.DatumIzvedbe }}</div>
</div>
</li>
</ul>
有什么想法吗?
更新
这是新的控制器:
dndetail.controller('dndetailCtrl', ['$rootScope', '$scope', '$routeParams', function ($rootScope, $scope, $routeParams) {
$rootScope.dnlist;
$scope.id = $routeParams.dnid;
for (var i = 0; i <= $rootScope.dnlist.length; i++) {
if ($rootScope.dnlist[i].ID === $scope.id) {
$scope.data = $rootScope.dnlist[i];
}
}
}]);
还是不行。从一组元素中,我想通过 id 获取一个元素,然后将其保存到数据中,以便我可以从数据中读取。 For 循环没有获取数据(未识别的 dnlist),但如果我在模板中绑定 {{ $root.dnlist[1].Property }} 它可以工作。
【问题讨论】:
-
为什么 $scope.datal = '{' + $rootScope.dnlist + '}';为什么不简单地分配 $scope.datal = $rootScope.dnlist;
-
您在 for 循环中使用
data1.length而不是$scope.data1.length- 因此您在控制台中看到了错误。 -
对不起,因为我尝试测试 chrome 开发工具是否正确。即使我按照您的建议(那是原始的),它也不起作用。 ://
-
@callmekatootie 如果您再次检查,您可以看到长度没有错误,而且我猜它写得正确,没有编辑。
-
谢谢 fooby 我现在就试试