通过AngularJS中的服务自动触发函数。
通过AngularJS中的服务自动触发函数。
大家好,我正在使用angulrajs
,通过服务在一个控制器中传递一个值到另一个控制器。目前一切正常,但我的需求是当服务的值在控制器2
中改变时,我想在一个作用域中获取服务的值,当作用域的值改变时,我需要触发一个名为refresh
的函数。我需要在这里调用刷新函数。这是我的fiddle链接:
问题的原因是当点击按钮时,函数才会触发,但我需要当控制器1的值发生变化时自动刷新函数,需要如何实现。
解决方法是可以将函数附加在ng-change
指令上或使用$watch
。
下面是一个使用AngularJS中的服务来自动触发函数的示例:
首先,可以尝试使用AngularJS默认的$emit
和$broadcast
方法,或者尝试在自己的服务中创建两个简单的函数:
angular.module('app').factory('StoreService', function() { var listeners = {}; var emit = function(name, val) { if(listeners[name]) { listeners[name](val) } } var on = function(name, callback) { listeners[name] = callback; } return { emit: emit, on: on, storedObject: '' }; });
然后,可以使用以下链接的JSFiddle示例进行参考:示例1、示例2(使用$watch
)、示例3(使用ng-change
更好,因为可以轻松使用debounce
)。
最后,可以根据需要更新回答。可以将函数附加在ng-change
指令上或使用$watch
方法。
问题的出现原因是需要在一个AngularJS应用中的两个控制器之间调用函数。解决方法是使用AngularJS的广播机制,通过$rootScope的broadcast函数来实现。
首先,在第一个控制器中,我们使用$rootScope的$on函数监听"CallParentMethod"事件,并在事件触发时调用parentmethod函数。
其次,在第二个控制器中,我们定义了childmethod函数,该函数通过$rootScope的$emit函数触发"CallParentMethod"事件。
通过这样的操作,第二个控制器就能够触发第一个控制器中的parentmethod函数了。
以下是完整的代码示例:
app.controller('One', ['$scope', '$rootScope', function($scope, $rootScope) { $rootScope.$on("CallParentMethod", function(){ $scope.parentmethod(); }); $scope.parentmethod = function() { // 任务代码 } } ]); app.controller('two', ['$scope', '$rootScope', function($scope, $rootScope) { $scope.childmethod = function() { $rootScope.$emit("CallParentMethod", {}); } } ]);
通过这种方式,我们就可以在AngularJS应用的两个控制器之间调用函数了。