AngularJS의 현재 $ 범위에서 컨트롤러 이름을 가져 오는 방법이 있습니까?
답변
아니요, 불가능합니다. $scope
이 지침에 속하면 어떻게 될까요? 범위가 속한 컨트롤러에 대한 정보를 검색 할 수있는 속성은 없습니다.
귀하의 질문은 제가 생각한 첫 번째 문제였습니다. 그래서 angularJs의 핵심 권리를 해킹하지 않고는 그렇게 할 수 없습니다. –
@tommasocapelli 방법이 없습니다. 이름을 수동으로 속성으로 지정해야합니다. – Engineer
감사합니다. $ 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(constructor, locals);
}
}]);
}]);
그런 다음
app.controller('SampleCtrl', ['$scope', '$log', function ($scope, $log) {
$log.log("[" + $scope.controllerName +"] got here");
}]);
공유해 주셔서 감사합니다. 이 코드는 1.2.x에서 잘 작동하지만 1.3에서는 깨졌습니다. 데모 : http://jsbin.com/muqipe/3/edit?html,console,output 소스 코드를 추적 한 후, 1.3에 대해 두 가지 더 많은 인수가 없어서 "함수 (생성자, 지역, 나중에, 들여 쓰기) "및"$ 대리자 (생성자, 지역, 나중에 들여 쓰기) "를 참조하십시오. – Darkthread
Darkthread 당신은 구세주이며, 초기 응답을 제공하기 위해 동일한 것을 주장하고 있습니다 :) –
디버깅 목적으로 놀라운 트릭 – ganqqwerty
이 또한 나를 위해 작동합니다.
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>
컨트롤러를 선택하기 위해 'ngRoute'를 사용할 때 컨트롤러 이름이 주어진 경로를 일치하면 내가 결정하는 함수를 필요, 그래서 이런 짓을
이미 내 설정에 경로를 추가했습니다.
angular.module('app', [ 'ngRoute' ]).config(
function($routeProvider) {
$routeProvider.otherwise('/');
$routeProvider.when('/', {
templateUrl : 'home.html',
controller : 'home'
}).when('/dashboard', {
templateUrl : 'dashboard.html',
controller : 'dashboard'
});
})
문제 같은 것이 조금 오래된지고 있지만, 여전히 일부 도움이 될 수있는 ... 나는 컨트롤러 이름 하지만 단지 Controller as
구문 작동을 얻을 수있는 방법을 발견했다. 이제 컨트롤러 이름을 매번 수동으로 다시 쓰지 않아도 로깅을 더 쉽게 할 수 있습니다.
// 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);
편집
는 또한 시도 :
// 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);
}]);
당신이 (자바 스크립트 레거시 코드에서)는 DOM에서 작업을 수행하려는 경우, 당신은 이런 식으로 할도 수 예를 들면 다음과 같습니다 실제로 예를 들어 같은 $scope
에서 작동이 Dave Syer의 제안 :
app.controller("ContactController", ['$route', function ContactController($route) {
console.log($route.current.controller);
}]);
이것은 훌륭합니다! 커다란 프로젝트에서 일하고 있는데, 페이지에서 주어진 엘리먼트를 클릭하고 'angular.element ($ 0) .controller(). constructor.name'을 실행하여 컨트롤러를 찾아야하는 것이 훨씬 쉽습니다. 콘솔에. –
그래서, 기초 오 N 케빈 Hakanson에서 대답하고 Darkthread에서 주석이,이 코드는 적어도 1.3.15에서 작동합니다 단지 $ attrs에 서비스를 시도 컨트롤러 공장 함수에서
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);
};
}])
}]);
앱을 축소하면이 기능이 작동하지 않습니다. 축소 된 파일에서도 인수의 이름을 어떻게 확인할 수 있습니까? –
제 경우에는 꿀꺽 꿀꺽 마술을 사용하여 응용 프로그램을 배포합니다. 그래서 나는이 문제를 다음과 같이 해결할 수 있었다 : https://www.npmjs.com/package/gulp-ng-annotate –
은 축소를 허용하는 편집을 제출했다. – coder
dev에
app.controller("MyController", ["$attrs", function($attrs){
var currentControllerName = $attrs["ngController"];
}]);
this.constructor.name
어디서나 해당 클래스의 범위를 사용할 수 있습니다.
- 1. ASP MVC 컨트롤러/액션 이름 가져 오기?
- 2. Grails 컨트롤러 액션에서 remoteField 이름 가져 오기
- 3. 레일 : 액션 컨트롤러 이름 가져 오기
- 4. 부트 스트랩에서 컨트롤러 이름 가져 오기
- 5. partialview 동작에서 상위 컨트롤러 이름 가져 오기
- 6. 레일에서 모델의 컨트롤러 이름 가져 오기
- 7. 동작 내부에서 컨트롤러 이름 가져 오기
- 8. 보기 및 컨트롤러 외부에서 현재 컨트롤러 이름 가져 오기
- 9. Cakephp 가져 오기 컨트롤러
- 10. ASP.Net WebAPI MediaTypeFormatter 내부에서 현재 컨트롤러 이름 가져 오기
- 11. 라이브러리 프로젝트에서 작업, 컨트롤러 및 영역 이름 가져 오기
- 12. 지속성 이름 가져 오기
- 13. 전체 이름 가져 오기
- 14. QPushButton의 이름 가져 오기
- 15. 데이터베이스 이름 가져 오기?
- 16. 인스턴스 이름 가져 오기
- 17. run.schedule에서 컨트롤러 var 가져 오기
- 18. 생성되는 컨트롤러 유형 가져 오기
- 19. 콜백에서 컨트롤러 인스턴스 가져 오기
- 20. 컨트롤러 내부 환경 가져 오기
- 21. MonoRail - 모든 컨트롤러 가져 오기
- 22. AppDelegate.m의보기 컨트롤러 인스턴스 가져 오기
- 23. 각형 컨트롤러 가져 오기 목록보기
- 24. MVC보기 T4보기 디렉토리 이름 가져 오기
- 25. 사용자 가져 오기 SAMaccount 이름 전체 이름
- 26. Doctrine : 이름 테이블에서 임의의 이름 가져 오기
- 27. TypeMap에서 인스턴스 이름 가져 오기 이름
- 28. ASP.Net MVC 영역 이름 가져 오기
- 29. Asp.Net 핵심 컨트롤러에서 사용자 이름 가져 오기
- 30. 시퀀스 이름 (Oracle) 가져 오기?
무엇을하려고합니까? 그것을 알고 싶다면 컨트롤러가'$ scope.controllerName'에 이름을 붙이게 할 수 있습니다. –
맞아요.하지만 나와 함께 협력하는 모든 사람들이 컨트롤러의 이름을 $ scope 변수에 넣어야한다는 것을 기억해야하기 때문에 유용하지 않습니다. –