首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在AngularJS ng-click (或ng-change等)中调用服务函数?

如何在AngularJS ng-click (或ng-change等)中调用服务函数?
EN

Stack Overflow用户
提问于 2013-11-19 01:32:03
回答 2查看 38K关注 0票数 19

当调用这样的函数时:

HTML:

代码语言:javascript
复制
<select ng-model="var" ng-change="myFunction(var)">
  <option ng-repeat="option in alloptions">{{option}}</option>
</select>

JS:

代码语言:javascript
复制
$scope.myFunction = function(){//do things}

这一切都工作得很好,但是当我的函数在服务中(控制器可以访问)时,函数不会被调用。通过将服务名作为前缀来调用它也不是一个选项(即使这在javascript代码本身中也有效) myService.myFunction(var)

所以我的问题是:当它们位于一个服务中时,在ng-change中调用服务的正确方式是什么?

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-19 01:38:48

您需要通过作用域使用函数调用服务函数。因此,在您的示例中,您可以在作用域的myfunction方法中调用服务方法,前提是您的服务被注入到控制器中。

代码语言:javascript
复制
$scope.myFunction = function(var){

   myService.myFunction(var);    
}

请始终记住,只有在$scope中定义的属性在UI中可用,而在您的服务中不可用。

票数 29
EN

Stack Overflow用户

发布于 2014-06-03 02:34:06

虽然“天才”的回答在技术上是正确的,但我不认为通过将整个服务直接附加到作用域来将整个服务暴露给视图是有问题的。但是,这取决于项目的复杂性和服务的设计。

例如,我编写的大多数与可重用视图状态相关的服务都只是一组函数,其中一个公开了底层数据。

代码语言:javascript
复制
return {
    getData: function() { return container; },
    doSomethingOnData: function() { /* some manipulation of container */ }
};

现在,您可以通过简单地将其附加到$scope变量来访问服务数据:

代码语言:javascript
复制
$scope.serviceData = MyService.getData();

因此,您访问服务功能的选择要么是使用Whizkids并创建附加到作用域的包装函数,要么是直接将服务公开给视图。

代码语言:javascript
复制
$scope.$MyService = MyService;

你可以这样做:

代码语言:javascript
复制
<div ng-click="$MyService.doSomethingOnData()"></div>

虽然这种做法严格违反了角度分离原则,但如果您的服务中有许多需要用简单包装器公开的函数,则它确实使代码简洁。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20054028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档