【发布时间】:2017-09-30 18:20:55
【问题描述】:
大家好,我正在使用angulrajs 将一个值从一个controller 传递到另一个使用服务的控制器,它工作正常,但我需要的是当controller 2 中的服务值发生变化时,当范围值时,我在一个范围内获得服务值更改我需要在service 值更改时触发它称为refresh 的函数,并且我需要在这里调用刷新函数我的小提琴
【问题讨论】:
标签: angularjs
大家好,我正在使用angulrajs 将一个值从一个controller 传递到另一个使用服务的控制器,它工作正常,但我需要的是当controller 2 中的服务值发生变化时,当范围值时,我在一个范围内获得服务值更改我需要在service 值更改时触发它称为refresh 的函数,并且我需要在这里调用刷新函数我的小提琴
【问题讨论】:
标签: angularjs
你可以$watch你的value.storeObject。虽然这不是最佳实践,但它适合这种功能。
$scope.$watch('value.storedObject', function(newVal) {
if(newVal !== '') {
refresh()
}
})
working fiddle(打开控制台查看refresh函数日志)
【讨论】:
localStorage 或ng-change,具体取决于您想在哪里进行操作。使用起来相当简单。查看localStorage docs
你可以尝试使用angular默认$emit、$broadcast,或者尝试在自己的服务中做2个简单的功能
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 example
JSFiddle example $watch
JSFiddle example ng-change 更好,因为你可以轻松使用debounce
【讨论】:
ng-change 指令或使用 $watch
你可以使用广播功能 请检查此 SO 链接以找到相关答案
How to call a function from another controller in angularjs?
app.controller('One', ['$scope', '$rootScope'
function($scope) {
$rootScope.$on("CallParentMethod", function(){
$scope.parentmethod();
});
$scope.parentmethod = function() {
// task
}
}
]);
app.controller('two', ['$scope', '$rootScope'
function($scope) {
$scope.childmethod = function() {
$rootScope.$emit("CallParentMethod", {});
}
}
]);
【讨论】: