当调用这样的函数时:
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中调用服务的正确方式是什么?
提前感谢
发布于 2013-11-19 01:38:48
您需要通过作用域使用函数调用服务函数。因此,在您的示例中,您可以在作用域的myfunction方法中调用服务方法,前提是您的服务被注入到控制器中。
$scope.myFunction = function(var){
myService.myFunction(var);
}
请始终记住,只有在$scope中定义的属性在UI中可用,而在您的服务中不可用。
发布于 2014-06-03 02:34:06
虽然“天才”的回答在技术上是正确的,但我不认为通过将整个服务直接附加到作用域来将整个服务暴露给视图是有问题的。但是,这取决于项目的复杂性和服务的设计。
例如,我编写的大多数与可重用视图状态相关的服务都只是一组函数,其中一个公开了底层数据。
return {
getData: function() { return container; },
doSomethingOnData: function() { /* some manipulation of container */ }
};
现在,您可以通过简单地将其附加到$scope
变量来访问服务数据:
$scope.serviceData = MyService.getData();
因此,您访问服务功能的选择要么是使用Whizkids并创建附加到作用域的包装函数,要么是直接将服务公开给视图。
$scope.$MyService = MyService;
你可以这样做:
<div ng-click="$MyService.doSomethingOnData()"></div>
虽然这种做法严格违反了角度分离原则,但如果您的服务中有许多需要用简单包装器公开的函数,则它确实使代码简洁。
https://stackoverflow.com/questions/20054028
复制相似问题