AngularJs函数在整个应用程序中可用
我正在用AngularJs制作一个应用程序,我面临一个需要在多个视图中调用相同函数的情况 在本例中,它是一个存储系统,在该系统中,同一个存储可以在多个视图中可见。在家里,如果它靠近用户,在付费广告中,在搜索结果中,等等 我知道这个函数应该在服务中,我已经这样做了。但问题是:我应该如何从view/html调用这个函数 我希望避免在多个控制器中反复重新定义相同的调用,但直到现在,还没有发现与此特定问题相关的任何内容 这是我的代码:AngularJs函数在整个应用程序中可用,angularjs,Angularjs,我正在用AngularJs制作一个应用程序,我面临一个需要在多个视图中调用相同函数的情况 在本例中,它是一个存储系统,在该系统中,同一个存储可以在多个视图中可见。在家里,如果它靠近用户,在付费广告中,在搜索结果中,等等 我知道这个函数应该在服务中,我已经这样做了。但问题是:我应该如何从view/html调用这个函数 我希望避免在多个控制器中反复重新定义相同的调用,但直到现在,还没有发现与此特定问题相关的任何内容 这是我的代码: function mainFactory($http) {
function mainFactory($http) {
var service = {
addFav: _addFav
};
return service;
function _addFav(data, func) {
return $http.post(baseUrl+func,data).then(
function(res) {return res.data;},
function(err) {alert(_errorMsg);}
);
};
}
function HomeController() {
vm.addFavorites = addFavorites;
function addFavorites(data) {
var func = 'function_name';
mainFactory.addFav(data,func);
}
}
function AdvController() {
vm.addFavorites = addFavorites;
function addFavorites(data) {
var func = 'function_name';
mainFactory.addFav(data,func);
}
}
function SearchController() {
vm.addFavorites = addFavorites;
function addFavorites(data) {
var func = 'function_name';
mainFactory.addFav(data,func);
}
}
如您所见,我需要在多个控制器中调用相同的函数
我已经看到了一些其他示例,它们说要从.run中将此函数用作$rootScope函数,但也有更多内容警告将函数定义为根函数不是一种好的做法
有没有关于如何解决这个问题的建议
编辑:
我现在使用的另一个解决方案是通过指令在body标签中定义一个“MainController”,这样我就可以在整个应用程序中使用这个函数。但是这个控制器的维护越来越复杂,有很多功能/过程
我应该如何从view/html调用此函数
您不应该直接从视图中执行此操作
但是,您可以将控制器嵌套到其他控制器中。因此,如果您认为您的函数应该是一个“特殊”函数,那么您可以使用以下“场景”
html:
<div ng-controller="appController as app">
<div ng-controller="HomeController as home">
<button ng-click="app.addFavorites();"></button>
</div>
<!-- ... -->
</div>
如果您将appController远离“内部视图”,这也可以与SPA一起使用。请随意给这个“appController”取另一个名字(我的有点糟糕)
我应该如何从view/html调用此函数
您不应该直接从视图中执行此操作
但是,您可以将控制器嵌套到其他控制器中。因此,如果您认为您的函数应该是一个“特殊”函数,那么您可以使用以下“场景”
html:
<div ng-controller="appController as app">
<div ng-controller="HomeController as home">
<button ng-click="app.addFavorites();"></button>
</div>
<!-- ... -->
</div>
如果您将appController远离“内部视图”,这也可以与SPA一起使用。请随意给这个“appController”取另一个名字(我的有点糟糕)。假设你有这样一个应用程序:
<html ng-app="app">
<body ng-controller="MainController">
<div ui-view></div>
</body>
</html>
然后,您可以在任何控制器中使用MyService,也可以在同一应用程序中的任何视图中使用addToFav
<a ng-click="addToFav(...)"></a>
在您看来,您可以使用:
vm.product.item以访问当前项
vm.product.list以访问所有项目
将所有相关数据和方法保存在一个组件中,并在不同的控制器中重复使用
那么为什么不使用angular service或factory,因为它们都是单例的,是的,我们可以同时使用这两种,其思想是构建组件,并重复使用它,而不仅仅是使用controller假设您有这样一个应用程序:
<html ng-app="app">
<body ng-controller="MainController">
<div ui-view></div>
</body>
</html>
然后,您可以在任何控制器中使用MyService,也可以在同一应用程序中的任何视图中使用addToFav
<a ng-click="addToFav(...)"></a>
在您看来,您可以使用:
vm.product.item以访问当前项
vm.product.list以访问所有项目
将所有相关数据和方法保存在一个组件中,并在不同的控制器中重复使用
那么为什么不使用angular service或factory,因为它们都是单例的,是的,我们可以同时使用它们,其思想是构建组件,并重用它,而不仅仅是使用控制器我不认为服务是答案,在$scope顶部定义函数就可以了,$scope.foo=function(){},然后在你的观点中使用它,就像我的问题是不同的,我已经看到了这个主题。但我要避免的是在每个控制器中重新调用函数。我想在一个控制器中定义它,并且能够在多个视图中调用它。您必须在某个地方声明它,并注入rootScope或您的服务依赖项。另一个解决方案是非角度解决方案,在JS文件上创建一个基本函数,并在页面中添加此文件,但我甚至不确定在这种情况下是否可以从HTML视图调用它。不幸的是,我看不到任何其他方式。如果您使用“父”控制器,这里的问题是您需要为每个视图管理多个控制器,不建议这样做。我不认为服务是答案,在$scope顶部定义函数就可以了,$scope.foo=function(){},然后在视图中使用它,就像我的问题不同一样,我已经看到了这个主题。但我要避免的是在每个控制器中重新调用函数。我想在一个控制器中定义它,并且能够在多个视图中调用它。您必须在某个地方声明它,并注入rootScope或您的服务依赖项。另一个解决方案是非角度解决方案,在JS文件上创建一个基本函数,并在页面中添加此文件,但我甚至不确定在这种情况下是否可以从HTML视图调用它。不幸的是,我看不到任何其他方式。如果您使用“父”控制器,这里的问题是,您需要在每个视图中管理多个控制器,但不建议这样做。这是我目前所拥有的。但在我的例子中,我有多个部分需要做同样的事情。所以我的主控制器越来越大,有很多功能。所以我期待着优化这个。但是这是一个很好的方法,如果我找不到其他的解决办法,这就是我现在所拥有的。但在我的例子中,我有多个部分需要做同样的事情。所以我的主控制器越来越大,有很多功能。所以我期待着优化这个。但如果我找不到其他解决方案,这是一个很好的方法