使用angular.element("ng-controller="someCtrl"]").scope()
代替使用工厂来处理使用依赖项注入的控制器之间的数据流是一种好习惯。这里的问题是我想调用另一个控制器的函数,所以有两种方法可以将它放在工厂中并在控制器中重用它或使用上面的语法来直接调用函数。
答案 0 :(得分:2)
从控制器访问DOM绝不是一种好习惯。因此,如果将方法包装在工厂/服务中是一种选择,我会说这是可行的方法。
答案 1 :(得分:2)
如果您需要从其他控制器调用一个函数,它应该是一个SERVICE / Factory。这样,您将在控制器之间共享代码,并且您将使用良好实践进行编码。
正如他们在angularjs docs
中所说的那样Angular服务是连接在一起的可替代对象 使用依赖注入(DI)。您可以使用服务来组织和 在您的应用中共享代码。
然后,您只需要创建服务或工厂
//The service
angular.module('myApp')
.service('serviceName', function ($http, $scope, socket) {
//This functions will be available in your controller
return {
list: function () {
$http.get(listUrl).success(function (lista) {
$scope.centerList = lista;
socket.syncUpdates('center', $scope.centerList);
});
}
};
});
//The controller
angular.module('myApp').controller('myCtrl', function ($scope, centerService) {
$scope.listCenters = function () {
centerService.list();
};
});
只是澄清一下,并添加一些关于服务和工厂的全面想法: