angular.js 뷰에서 사용하기 전에 스코프 변수가 로드될 때까지 기다립니다.
내 보기에는 권한을 통해 제어되는 몇 가지 메뉴 옵션이 있습니다. 즉, 모든 사용자가 "대시보드" 보기를 볼 수 있는 것은 아닙니다.뷰의 메뉴 옵션에는 다음과 같은 것이 있습니다.
<li ng-show="validatePermission('Dashboard')">Dashboard</li>
컨트롤러에는 현재 사용자의 권한을 확인하는 validate Permission 메서드가 정의되어 있습니다.예를 들어 다음과 같습니다.
$scope.validatePermission = function(objectName) {
if $scope.allPermissions......
또한 컨트롤러에서 $http 호출을 통해 다음 권한을 로드합니다.
$http.get('permissions/' + userid + '.json').success(function(data) {
$scope.allPermissions = data;....
문제는 뷰가 validatePermission을 호출하기 전에 $scope.allPermissions가 로드되지 않는다는 것입니다.보기가 렌더링되기 전에 allPermissions가 로드될 때까지 어떻게 기다려야 합니까?
질문:
보기가 렌더링되기 전에 allPermissions가 로드될 때까지 어떻게 기다려야 합니까?
전체 보기가 렌더링되지 않도록 하려면 해결을 사용해야 합니다.단, $http는 약속을 반환하므로 약속 라이브러리를 사용할 필요는 없습니다.
var app = angular.module('app');
app.config(function ($routeProvider) {
$routeProvider
.when('/', {
templateUrl : 'template.html',
controller : 'MyCtrl',
resolve : MyCtrl.resolve
});
});
function MyCtrl ($scope, myHttpResponse) {
// controller logic
}
MyCtrl.resolve = {
myHttpResponse : function($http) {
return $http({
method: 'GET',
url: 'http://example.com'
})
.success(function(data, status) {
// Probably no need to do anything here.
})
.error(function(data, status){
// Maybe add an error message to a service here.
// In this case your $http promise was rejected automatically and the view won't render.
});
}
}
단, 단순히 대시보드 <li>를 숨기는 경우에는 Joe Gauterin의 제안대로 합니다.필요하다면 여기 아주 간단한 예시가 있습니다.
을 가지다validatedPermission
함수가 false를 반환하는 경우allPermissions
로딩되지 않았습니다.그렇게 하면 그 요소가ng-show
가 표시될 때까지allPermissions
이 로드되었습니다.
또는,ng-show="allPermissions"
동봉하여<ul>
또는<ol>
.
루트 컨트롤러에서 해당 루트를 렌더링하기 전에 해당 오브젝트의 해결을 기다리는 해결 오브젝트를 지정할 수도 있습니다.
각 문서에서 : https://docs.angularjs.org/api/ngRoute/provider/$routeProvider
해결 - {개체}=} - 컨트롤러에 주입해야 하는 선택적 종속성 맵입니다.이러한 의존관계 중 하나가 약속일 경우 컨트롤러가 인스턴스화되고 $routeChangeSuccess 이벤트가 발생하기 전에 해결되어 값으로 변환됩니다.맵 오브젝트는 다음과 같습니다.
key: {string}: 컨트롤러에 삽입되는 의존관계 이름.공장 - {string| function :문자열일 경우 서비스의 에일리어스입니다.그렇지 않으면 기능이 삽입되어 반환값이 의존관계로 취급됩니다.결과가 약속일 경우 값이 컨트롤러에 주입되기 전에 해결됩니다.
구글 그룹 레퍼런스도 참조하십시오.https://groups.google.com/forum/ #!topic / angular / QtO8QoxSjYw
저도 비슷한 상황에 처했습니다.또한 다음 웹 사이트를 잠시 살펴보시기 바랍니다.
http://docs.angularjs.org/api/ng/directive/ngCloak
더 큰 효과를 볼 수 있습니다.
angularjs 설명서에 따르면:
ngCloak 지시어는 응용 프로그램 로드 중에 Angular html 템플릿이 원시(파일되지 않음) 형식으로 브라우저에 잠시 표시되지 않도록 하기 위해 사용됩니다.html 템플릿 표시로 인한 바람직하지 않은 깜박임 효과를 방지하려면 이 명령을 사용합니다.
코드를 ng로 포장합니다.문제를 해결한 경우:
<div ng-if="dependentObject">
<!-- code for dependentObject goes here -->
</div>
언급URL : https://stackoverflow.com/questions/16617259/wait-until-scope-variable-is-loaded-before-using-it-in-the-view-in-angular-js
'programing' 카테고리의 다른 글
서버 주체가 SQL Server MS 2012의 현재 보안 컨텍스트에서 데이터베이스에 액세스할 수 없습니다. (0) | 2023.04.07 |
---|---|
Angular에서 $location으로 리디렉션하는 방법.path를 $120으로 지정합니다.성공 후 콜백 (0) | 2023.04.02 |
타이프스크립트에서 enum을 인덱스 키 유형으로 사용하는 방법 (0) | 2023.04.02 |
워드프레스에서 쿼리를 선택하다 (0) | 2023.04.02 |
오라클에서 문자열을 여러 행으로 분할 (0) | 2023.04.02 |