如何在AngularJS ng-click(或ng-change,..)中调用服务函数
How to call a service function in AngularJS ng-click (or ng-change, ...)?
调用这样的函数时:
HTML:
<select ng-model="var" ng-change="myFunction(var)">
<option ng-repeat="option in alloptions">{{option}}</option>
</select>
JS:
$scope.myFunction = function(){//do things}
这一切都很完美,但当我的函数在一个服务(控制器可以访问)中时,函数就不会被调用。通过将服务名称作为前缀来调用它也不是一个选项(即使这在javascript代码本身中有效)myService.myFunction(var)
所以我的问题是:当服务位于服务中时,在ng-change中调用服务的正确方法是什么?
提前感谢
您需要通过作用域使用函数来调用服务函数。因此,在您的示例中,您可以在作用域的myfunction方法中调用服务方法,前提是您的服务被注入到您的控制器中。
$scope.myFunction = function(var){
myService.myFunction(var);
}
请始终记住,只有在$scope中定义的属性在UI中可用,而不是您的服务。
虽然Whizkids的答案在技术上是正确的,但我认为通过将整个服务直接附加到作用域来将其暴露在视图中没有问题。然而,这取决于项目的复杂性和服务的设计。
例如,我编写的大多数与可重用视图状态相关的服务都只是一组函数,其中一个函数公开了底层数据。
return {
getData: function() { return container; },
doSomethingOnData: function() { /* some manipulation of container */ }
};
现在,只需将服务数据附加到$scope
变量即可访问服务数据:
$scope.serviceData = MyService.getData();
因此,访问服务函数的选项是使用Whizkids answer并创建附加到scope的包装函数,或者直接向视图公开服务。
$scope.$MyService = MyService;
对此,你可以做一些类似的事情:
<div ng-click="$MyService.doSomethingOnData()"></div>
虽然这种做法严格违反了angulars分离原则,但如果您的服务中有很多函数需要用简单的包装器公开,它确实会使代码简洁。
相关文章:
- 如何从模块链中调用函数.导出到节点中
- 调用函数内部的函数
- 在javascript中调用c函数
- DropDownListFor赢得't在更改时调用函数
- Javascript页面调用函数
- 在动画结束之前调用函数
- 允许父窗口在其不同域的子iframe上调用函数
- 运行Infinite Scroll后调用函数时出现问题
- JavaScript:在调用函数的文本输入上按enter键
- 使用大括号和不使用bracs调用函数的区别
- javascript在事件上调用函数
- 从index.html调用函数,该函数无限循环
- 从带参数的字符串变量调用函数中的函数
- 为什么 JS 不在滚动时调用函数
- 是否可以在不更改上下文的情况下调用函数.apply
- 如何在ES6类中使用参数调用函数
- AngularJS:调用函数时编号不更新
- JavaScript中的立即调用函数表达式(IIFE)-传递jQuery
- 在JavaScript中调用函数时自定义此选项
- 调用函数中声明的变量