我知道我的问题与this post有关,但我想知道是否有一种AngularJS特定的方法可以解决这个问题。
这是交易:
我在Angular指令中使用ES6 Class和ControllerAs
,因此控制器声明如下:
class myCtrl {
constructor ( $log ) {
'ngInject';
// Dependency Injections
var privateLog = $log; // Private but scoped to constructor
this.publicLog = $log; // Public
// Default attributes
this.foo = 'bar';
this.publicLog.log('it works in constructor'); // logs 'it works in constructor'
privateLog.log('it works in constructor'); // logs 'it works in constructor'
}
logSomething () {
this.publicLog.log('it works in class method'); // logs 'it works in class method'
try {
privateLog.log('it works in class method');
}
catch(e) {
console.log(e); // Uncaught ReferenceError: privateLog is not defined
}
}
}
var test = new myCtrl();
test.logSomething();
test.publicLog.log('is public'); // logs 'is public'
try {
test.privateLog.log('is private');
}
catch(e) {
console.log(e); // Uncaught TypeError: Cannot read property 'log' of undefined
}
问题是我希望能够在所有classe方法中访问我的依赖注入, 但是我不想让它们从外面公开到达。
此外,我不想在构造函数中声明我的方法,因为我不想让它们为每个实例重新声明。
有没有正确的方法可以做到这一点,还是我错过了什么?
答案 0 :(得分:0)
如果您想将注射剂保密,请使用经典的角度控制器结构,如此
function MyCtrl($log) {
'ngInject';
this.logSomething = function(message) {
$log(message);
}
}
现在实际$log
隐藏在关闭状态,但logSomething
可公开用于模板。
UPD。如果由于某种原因想要继续使用ES6类,可以尝试使用任何现有方法将某些类成员设为私有。有a review种可能的方法。