Denetleyici adını AngularJS'deki geçerli $ kapsamından elde etmenin bir yolu var mı?
cevap
Hayır, bu mümkün değil. Ne $scope
direktifine aitse? Kapsamın ait olduğu denetleyici hakkında bilgi alabilecek hiçbir özellik yoktur.
Sorunuz, düşündüğüm ilk sorun oldu. Yani angularJs'in temel hakkını kullanmadan bunu yapmanın bir yolu yok mu? –
@tommasocapelli Hiç bir yolu yoktur. Adı bir özellik olarak manuel olarak atamanız gerekir. – Engineer
Çok teşekkür ederim, eğer denetleyicinin adını $ kapsamına almanın başka bir yolunu bulamadıysam, bu benim çözümüm olurdu. –
Bunun iyi bir çözüm olduğundan emin değilim, ama bu teknik kullanılarak $scope.controllerName
enjekte başardı:
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);
}
}]);
}]);
Sonra
app.controller('SampleCtrl', ['$scope', '$log', function ($scope, $log) {
$log.log("[" + $scope.controllerName +"] got here");
}]);
Paylaşım için teşekkürler. Kod, açısal 1.2.x'te iyi çalışır ancak 1.3'te bozulur. demo: http://jsbin.com/muqipe/3/edit?html ,console ,output Kaynak kodunu izledikten sonra, 1.3 için iki argüman eksik olduğunu buldum, bu yüzden "function (constructor, locals, sonra, başvuru için "ve" $ delege (kurucu, yerliler, daha sonra, girinti) " – Darkthread
Darkthread, bir kurtarıcı ve başlangıç cevabını sunduğunuz için aynı şeyi yazıyor :) –
Hata ayıklama amaçları için harika bir numara – ganqqwerty
Bu aynı zamanda benim için çalışıyor.
app.controller('navigation', function($scope, $route) {
$scope.tab = function(route) {
return $route.current && route === $route.current.controller;
}
}
Sonra bu gibi kullanabilirsiniz:
<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>
bir denetleyici seçmek için 'ngRoute' kullanırken kontrolör adı verilen bir rotayı eşleşti eğer belirlemek için bir işlev ihtiyacı vardı, bu yüzden bunu
Zaten yapılandırmam için yollar ekledim, örn.
angular.module('app', [ 'ngRoute' ]).config(
function($routeProvider) {
$routeProvider.otherwise('/');
$routeProvider.when('/', {
templateUrl : 'home.html',
controller : 'home'
}).when('/dashboard', {
templateUrl : 'dashboard.html',
controller : 'dashboard'
});
})
soru gibi bir şey biraz eskidi ama hala bazılarınız için yararlı olabilir ... Ben kontrolör adını ama sadece Controller as
sözdizimi ile çalışır almak için bir yol buldu. Şimdi denetleyicimin adını her seferinde el ile yeniden yazmak zorunda kalmadan günlüğe kaydetmeyi daha kolay yapabilirim.
// 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);
Edit
Ayrıca çalıştı:
// 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);
}]);
sen (javascript eski kod) DOM yapmak istiyorsanız, bu şekilde yapmak da olabilir: İşte bir örnek aslında örneğin $scope
çalışır o Dave Syer öneri:
app.controller("ContactController", ['$route', function ContactController($route) {
console.log($route.current.controller);
}]);
Bu harika! Büyük bir proje üzerinde çalışıyorum ve sayfadaki belirli bir öğeye bakmak için hangi denetleyiciye bakmam gerektiğini bulmak çok kolay ve 'angular.element ($ 0) .controller(). Constructor.name' konsolda. –
Yani, esas o n Kevin Håkanson gelen cevap ve Darkthread gelen yorum, bu kod en az 1.3.15 çalışır: sadece $ attrs hizmet deneyin kontrolör fabrika fonksiyonunda
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);
};
}])
}]);
, eğer uygulamanızı küçültürseniz işe yaramıyor, küçültülmüş bir dosyada bile argümanların isimlerini nasıl sağlıyorsunuz? –
Benim durumumda, başvurumu dağıtmak için gulp kullanıyorum. Bu yüzden bu sorunu kullanarak https://www.npmjs.com/package/gulp-ng-annotate –
minifikize izin veren bir düzenleme gönderdi. – coder
dev
app.controller("MyController", ["$attrs", function($attrs){
var currentControllerName = $attrs["ngController"];
}]);
sadece this.constructor.name
herhangi bir yerde bu sınıfın kapsamı bir kez kullanıma hazır.
- 1. Ana öğe adını XPath'te alın
- 2. Codeigniter denetleyicide denetleyici adını al
- 3. Form öğesinin adını alın
- 4. Java programının adını alın
- 5. sqlite ekli veritabanlarının adını alın
- 6. Gerçek tablo adını Magento'da alın
- 7. Klasörün adını Varlıklar dizininden alın
- 8. dış kapsamından bir değer erişme
- 9. Elixir - Bir denetleyici altındaki tüm PID'leri bir denetleyici altından alın
- 10. Denetleyici
- 11. Denetleyici laravel 5'de useragent alın php
- 12. raylarda url'den denetleyici ve eylem bilgileri alın
- 13. Tüm ses aygıtının adını Windows'tan alın
- 14. Üzerinde adı geçen öznitelikte özellik adını alın
- 15. Yerelleştirilmiş dil adını yerel ayar kodundan alın
- 16. İstemci OS kullanıcı adını SQL Server'dan alın
- 17. Güncel kullanıcı adını C++ 'da Windows'ta alın
- 18. Sunucu makine adını ASP.NET MVC'de alın?
- 19. EC2 örneğinin içinden ELB adını alın
- 20. Çocuğun ana sınıfı adını ES6 ile alın.
- 21. Django modelinin birincil alanının adını alın
- 22. ateş (tetiklenmiş) etkinlikte adını (tip) alın
- 23. Transclude kapsamından açısal olarak değişen ana model
- 24. ASP.NET-MVC. Denetleyici adını bir url'den nasıl edinebilirim?
- 25. Bir denetleyici ve eylem için tam nitelikli URL alın.
- 26. DB sahibinin adını PostgreSql
- 27. MVC Pass Denetleyici Denetleyici
- 28. Tam adını bilmeden, onu öldürmek için bir işlemin PID'sini alın
- 29. Bir ASP.NET web sitesi için IIS site adını alın
- 30. .NET 3.5'de bir Lambda Expression'da kullanılan özellik adını alın
Ne yapmaya çalışıyorsunuz? Bunu bilmek isterseniz, kontrol cihazınızın ismini '$ scope.controllerName' üzerinde bırakabilirsiniz. –
Haklısınız, ancak bu çok kullanışlı değil çünkü ben ve benimle işbirliği yapan herkesin denetleyicinin adını $ kapsam değişkenine koyduğunu hatırlamanız gerekiyor. –