$scope에서 컨트롤러 이름 가져오기
AngularJS의 현재 $scope에서 컨트롤러 이름을 얻을 수 있는 방법이 있습니까?
이게 좋은 해결책인지는 잘 모르겠지만, 전 이 문제를 해결할 수 있었습니다.$scope.controllerName
다음 기술을 사용합니다.
app.config(['$provide', function ($provide) {
$provide.decorator('$controller', [
'$delegate',
function ($delegate) {
return function(constructor, locals) {
if (typeof constructor == "string") {
locals.$scope.controllerName = constructor;
}
return $delegate.apply(this, [].slice.call(arguments));
}
}]);
}]);
그리고나서
app.controller('SampleCtrl', ['$scope', '$log', function ($scope, $log) {
$log.log("[" + $scope.controllerName +"] got here");
}]);
따라서 Kevin Hakanson의 답변과 Darkthread의 코멘트를 바탕으로 이 코드는 적어도 1.3.15:dev에서 작동합니다.
app.config(['$provide', function ($provide) {
$provide.decorator('$controller', ['$delegate', function ($delegate) {
return function (constructor, locals, later, indent) {
if (typeof constructor === 'string' && !locals.$scope.controllerName) {
locals.$scope.controllerName = constructor;
}
return $delegate(constructor, locals, later, indent);
};
}])
}]);
아니, 그건 불가능해.면 어쩌지$scope
지시사항에 속합니까?범위가 속한 컨트롤러에 대한 정보를 검색할 수 있는 속성이 없습니다.
이것도 좋아요.'ngRoute'를 사용하여 컨트롤러를 선택할 때 컨트롤러 이름이 지정된 경로와 일치하는지 확인하는 기능이 필요했기 때문에 다음과 같이 수행했습니다.
app.controller('navigation', function($scope, $route) {
$scope.tab = function(route) {
return $route.current && route === $route.current.controller;
}
}
이렇게 사용할 수 있습니다.
<div ng-controller="navigation" class="container">
<ul class="nav nav-pills" role="tablist">
<li ng-class="{active:tab('home')}"><a href='#/'>home</a></li>
<li ng-class="{active:tab('dashboard')}"><a href='#/dashboard'>dashboard</a></li>
</ul>
</div>
설정에 루트가 이미 추가되어 있는 경우(예:
angular.module('app', [ 'ngRoute' ]).config(
function($routeProvider) {
$routeProvider.otherwise('/');
$routeProvider.when('/', {
templateUrl : 'home.html',
controller : 'home'
}).when('/dashboard', {
templateUrl : 'dashboard.html',
controller : 'dashboard'
});
})
컨트롤러 팩토리 기능에서는 $attrs 서비스를 사용해 보십시오.
app.controller("MyController", ["$attrs", function($attrs){
var currentControllerName = $attrs["ngController"];
}]);
그저.this.constructor.name
해당 클래스의 범위가 인스턴스화되면 사용할 수 있는 모든 위치.
질문이 좀 낡았지만 그래도 도움이 될 수 있을 것 같은데...컨트롤러 이름을 얻는 방법을 찾았는데, 이 기능은 다음 명령어에서만 작동합니다.Controller as
구문을 사용합니다.이제 매번 컨트롤러 이름을 수동으로 다시 쓸 필요 없이 로깅을 보다 쉽게 수행할 수 있게 되었습니다.다음은 예를 제시하겠습니다.
// a simple route with controller as syntax
$routeProvider.when(
'/contact',
{
templateUrl: 'home/contact',
controller: 'ContactController as vm'
}
);
// controller
app.controller("ContactController", ["$log", function ContactController($log) {
var vm = this;
$log.log(vm.constructor.name);
}]);
(javascript 레거시 코드에서) DOM에서 이 작업을 수행할 경우 다음과 같이 수행할 수도 있습니다.
// scope element via the DOM
var scope = angular.element($(element)).scope();
console.log(scope.this.vm.constructor.name);
// controller element via the DOM
var controller = angular.element($(element)).controller();
console.log(controller.constructor.name);
편집
Dave Syer의 제안도 시험해 보았습니다.$scope
예를 들어 다음과 같습니다.
app.controller("ContactController", ['$route', function ContactController($route) {
console.log($route.current.controller);
}]);
jQuery를 사용하면 지시 범위와 컨트롤러 범위를 얻을 수 있습니다.
window.top.$('[ng-controller="mainCtrl"]').scope(); // get scope of controller
window.top.$('[epubby-page-view]').scope(); // get scope of directive
이 스코프 가져오기 방법을 사용하여 어디서든 메서드를 실행하거나 변수를 업데이트할 수 있습니다.
예를 들어 mainCtrl 컨트롤러에서 메서드를 실행하는 경우 다음과 같이 메서드를 직접 호출하면 됩니다.
var myData = window.top.$('[ng-controller="mainCtrl"]').scope().getData();
콘솔에서 디버깅하는 경우 도움이 되는 것은 다음과 같습니다.
- Chrome 개발 도구에서 검색할 컨트롤러를 UI에서 선택하십시오.
- 콘솔 입력:
angular.element($0).controller().__proto__
컨트롤러의 프로토타입을 얻을 수 있습니다.컨스트럭터 내부에는FunctionLocation
파일에 대응합니다.필요에 따라서, 파일 마다 1 개씩 컨트롤러를 작성하면, 컨트롤러가 거기에 있는 것을 알 수중에 있습니다.파일 이름을 컨트롤러로 지정하면 더 좋습니다. 왜 그렇게 하지 않는지 모르겠네요.
요청하신 내용은 아니지만 개발 도구에서 바로 사용할 수 있어 편리합니다.
언급URL : https://stackoverflow.com/questions/23382734/get-controller-name-from-scope
'programing' 카테고리의 다른 글
양호한 JWT 인증 필터 설계 방법 (0) | 2023.03.14 |
---|---|
POSTMAN에 객체가 존재하는지 확인하는 방법 (0) | 2023.03.14 |
항목이 다른 테이블에 없는지 확인하는 중 (0) | 2023.03.14 |
ORA-01653: 테이블스페이스 ORA-06512에서 테이블을 확장할 수 없음 (0) | 2023.03.14 |
React js 상위 구성 요소에서 하위 구성 요소 상태 변경 (0) | 2023.03.14 |