Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 可以让Angularjs使用原型方法和变量吗_Javascript_Class_Angularjs_Haxe - Fatal编程技术网

Javascript 可以让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

你知道,在angularjs中,大多数逻辑都基于
$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错误,然后尝试我的第一种方法。