我有一個JSON服務輸出一個roleName和一個id,我試圖使用該角色來隱藏或顯示應用程序中的元素,使用angular指令。看起來該服務已成功調用,並且$ scope.data正在從輸出中填充,但我似乎無法從數據對象訪問該角色,因爲控制檯日誌讀取的值爲$ scope.data.rolename的Undefined 。無法訪問Angular指令中服務的對象屬性
.JS
app.directive('restrictTo', ['SecuritySvc', function (SecuritySvc) {
return {
restrict: 'EA',
replace: true,
transclude: true,
scope: {},
controller: ['$scope', '$attrs', '$q', 'SecuritySvc', function ($scope, $attrs, $q, SecuritySvc) {
$scope.data = SecuritySvc.getRole();
if ($scope.data.roleName == $attrs.restrictTo) {
$scope.allowed = true;
} else {
$scope.allowed = false;
}
console.log($scope.data); // showing in log
console.log($scope.data.roleName); // Undefined
}],
template: '<div ng-show="{{ $scope.allowed }}" ng-transclude></div>'
}
從代碼的控制檯輸出上面
$promise: Object
$resolved: true
roleId: 1
roleName: "Admin"
undefined
我清理了,把承諾了,希望這將讓事情清晰一點。 SecuritySvc.getRole();在控制器中工作,我可以顯示data.roleName但不在指令中。 – rlwheeler
@citizenslave我可以看到你已經盡力回答這裏的問題,但在大多數情況下,最好在你回答問題之前給你解釋一下。 –
@TwentyGotoTen,謝謝。一旦我有足夠的聲望,我會盡快做到這一點,但我沒有意識到這是正確的協議。 --- @rlwheeler,這有助於清理你的代碼,但你可以重新運行它,並複製/粘貼控制檯結果更新的代碼?顯然'$ promise'和'$ resolved'屬性應該沒有了。即使marfarma的回答如下,我仍然格外困惑,你如何記錄一個對象而不是其中一個成員。 – citizenslave