Javascript ng点击时角度工厂原型分离

Javascript ng点击时角度工厂原型分离,javascript,angularjs,Javascript,Angularjs,我有一个工厂,有一系列的原型,需要能够相互呼叫。问题是使用ng click时,对“this”的引用应用于html模板,而不是原始的factory类 以下是一个例子: angular.factory('myFactory', function(){ function FactoryA(){} FactoryA.prototype.hello = function(){ console.log('Hello') }; FactoryA.prototype.useHello =

我有一个工厂,有一系列的原型,需要能够相互呼叫。问题是使用
ng click
时,对“this”的引用应用于html模板,而不是原始的factory类

以下是一个例子:

angular.factory('myFactory', function(){
    function FactoryA(){}
    FactoryA.prototype.hello = function(){ console.log('Hello') };
    FactoryA.prototype.useHello = function(){ this.hello() };

    return FactoryA;
}
控制器将工厂设置为$scope变量“myFactory”

在html模板中,
ng单击
的调用方式如下:

<button type="button" ng-click="myFactory.useHello()">Hello</button>
你好 问题是myFactory.usehollo上下文中的“this”被html模板引用替换,并失去了与FactoryA及其其他原型的链接


如何保持与factory类及其其他原型关联的ng click函数?

您可以将factory方法绑定到自身以避免出现问题,但这是一个糟糕的解决方法

正如@ste2425所说,您应该在控制器中声明一个处理程序,该处理程序将执行对服务方法的调用,并在模板中使用该处理程序:

<button type="button" ng-click="useHello()">Hello</button>

此外,对工厂/服务使用原型声明(设计上是单例的)也有点无用。

公开您范围内的服务/工厂通常被认为是不好的做法。正是由于这个原因,通过数据绑定所做的任何更改不仅会传播回控制器中的服务,而且会传播回应用程序中的所有使用(即服务不是工厂,而是单个实例)。您应该在控制器中创建一个与服务对话的点击处理程序。您还可以绑定工厂函数的上下文。是否可以在作用域中创建myFactory的位置添加代码?我认为您缺少
new
it up。仅作一点解释,我理解当使用angular用于构建动态网站和应用程序时,数据将工厂绑定到控制器的问题。出于我的目的,我需要工厂在其供应的产品方面完全充满活力。我将工厂作为一个动态类来为应用程序提供某些“依赖项”,这些依赖项是基于Java系统加载到应用程序服务器端所需要的。在应用程序中的不同服务器端进程之间切换将使用运行应用程序所需的依赖项更新应用程序。我已将此标记为正确。正如你和ste2425所指出的,我确实从传统意义上看到了我所做的事情的问题,但我正在编写的应用程序远远不是传统的。事实证明,我只是犯了一个错误,我在代码中声明了与useHello等效的内容,但没有与工厂正确连接。我猜这个问题发得太快了。谢谢你!
$scope.useHello = function() {
    myFactory.useHello();    
}