Javascript 可以让Angularjs使用原型方法和变量吗
你知道,在angularjs中,大多数逻辑都基于Javascript 可以让Angularjs使用原型方法和变量吗,javascript,class,angularjs,haxe,Javascript,Class,Angularjs,Haxe,你知道,在angularjs中,大多数逻辑都基于$scope: function Ctrl($scope) { $scope.name = "Freewind"; $scope.hello = function() { alert($scope.name); } $scope.method1 = function() {} $scope.method2 = function() {} $scope.method3 = function
$scope
:
function Ctrl($scope) {
$scope.name = "Freewind";
$scope.hello = function() {
alert($scope.name);
}
$scope.method1 = function() {}
$scope.method2 = function() {}
$scope.method3 = function() {}
$scope.method4 = function() {}
$scope.method5 = function() {}
}
现在我使用haxe生成angularjs代码,如果我的代码是:
class Ctrl {
public function new(scope:Scope) {
scope.name = "Freewind";
scope.hello = function() {
alert(scope.name);
}
scope.method1 = function() {}
scope.method2 = function() {}
scope.method3 = function() {}
scope.method4 = function() {}
scope.method5 = function() {}
}
}
typedef Scope = {
name:String,
hello:Void->Void,
method1: Void->Void,
method2: Void->Void,
method3: Void->Void,
method4: Void->Void,
method5: Void->Void
}
但我想从haxe的类系统中获益(代码可能更简单更清晰),我可以这样声明:
class Scope {
public var name:String;
public function hello() {}
public function method1() {}
public function method2() {}
public function method3() {}
public function method4() {}
public function method5() {}
}
然后找到将Scope
类与angularjs的$Scope
关联的方法
但是从haxe生成的范围
使用的是原型:
Scope = function();
Scope.prototype.name = "something";
Scope.prototype.hello = function() {}
Scope.prototype.method1 = function() {}
Scope.prototype.method2 = function() {}
Scope.prototype.method3 = function() {}
Scope.prototype.method4 = function() {}
Scope.prototype.method5 = function() {}
在这种情况下,我找不到让angularjs使用它的解决方案
有没有可能让angularjs与原型一起工作,这样它就可以与haxe类系统一起工作(还有其他语言,比如coffeescript/typescript,它们都支持类) 作用域的构造函数是在闭包中声明的,因此您不容易访问它。。。但是(!)JavaScript在任何现有对象的基础上都提供了构造函数 从理论上讲,您可以获得$rootScope的构造函数,改变它的原型,这将改变任何随后创建的范围。但是,您可能希望在应用程序模块的.run()或.config()中执行此操作
app.run(function($rootScope) {
$rootScope.constructor.prototype.foo = 'Set from prototype';
});
但是:您可能不需要这样做。我认为您可能需要这样做的唯一原因是在某些边缘情况下,您需要确保某个函数或属性在某个作用域上可用,即使它是一个独立的作用域(正如我链接的plunker中的指令中所示)
因为存在范围继承,而且您有$rootScope要使用,我真的想不出任何有效的理由需要通过原型设计来更改范围。为了得到这个问题的实际答案,应该提到,现在这个库解决了这个问题:;) 这样做没有任何意义,如果您想要可重用的代码位,请将您的方法移动到服务中。angularJS称之为controler的不是MVC控制器,而是MVVM设计模式中的ViewModel。真正的控制器在指令中。使用此宏2天后,我不再推荐它。当我以这种方式编写代码时,我无法停止思考“它将生成什么js代码?它正确吗?”?太累了。而且还发现了它引入的小错误,这些错误可能已经修复,但我们需要更多的编码规则。@Freewind:如果你想让这个库正常工作,你需要投入时间并在现场进行测试。几天后你不应该放弃。考虑到这个库有多年轻,以及您对宏有多陌生,它的形状是令人尊敬的。您需要对其进行优化,最重要的是添加测试。这样你就会知道它是正确的。让它成为一个可靠的软件是一个可以实现的目标。谢谢你的建议。我正在等待修复haxe错误,然后尝试我的第一种方法。