![](/img/trans.png)
[英]How can I make an AngularJS controller depend on a value loaded on the rootScope via ajax?
[英]AngularJS How to get data to controller via $rootScope?
我正在開發一個移動應用程序,但在將數據發送到控制器時遇到問題。 我要做的是從服務獲取數據,並且運行良好(在路由時為“ /”或根目錄):
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}},它將起作用。
我認為此答案無法解決問題並嘗試刪除它,但由於已在評論中提及該問題,因此我未刪除它。
angularjs中的$ http返回一個Promise,您不能直接使用Promise來訪問數據,請在回答相似的地方檢查此答案。
如果有人想知道問題出在平等運算符上。 如果我用檢查類型==的值更改===,則不會得到TypeError:無法再讀取未定義錯誤的屬性“ ID”。 由於這是解決問題的方法,因此我也想作一個解釋。 我是一名JavaScript初學者,如果有人對這里發生的事情有所了解,我非常想知道其中的解釋。
工作的新控制器:
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];
}
}
}]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.