gpt4 book ai didi

javascript - Controller 单击即可更改另一个 Controller 的数据

转载 作者:行者123 更新时间:2023-12-03 07:35:03 26 4
gpt4 key购买 nike

我想通过 onClick 事件将一些数据从一个 Controller 传递到第二个 Controller 。我尝试在两个 Controller 之间使用服务,但似乎从服务接收数据的 Controller 无法识别第一个 Controller 的 onClick 事件,这会导致静态/不变的数据.

<小时/>

OnClick 函数( Controller 1)

$scope.select = function(index){            
vm.currentActive = index;
sessionService.setState(index);
};
<小时/>

换货服务

app.service('sessionService', function() {


var state = null;

var setState = function(changestate){
state = changestate;
};

var getState = function(){
return state;
};

return {

setState: function(changestate){
setState(changestate);
},
getState: function(){
return state;
}
};
});
<小时/>

接收 Controller ( Controller 2)

app.controller('ContentController', function ($scope, sessionService)
{
var vm = this;
vm.currentActive = sessionService.getState();
});

最后,我希望每当 Controller 1 中触发 OnClick 事件时, Controller 2 的状态就会发生变化。这种服务方式是最好的还是建议更改中的数据单击后 Controller 2?

最佳答案

监视服务状态的一个选项是使用 $scope.$watch 和一个函数,该函数返回要监视的值的变化。

$scope.$watch(function(){ return sessionService.getState(); }, function(newValue, oldValue){
//Do something
});

如果服务中的值发生更改, watch 将在下一个摘要周期获取更改。使用此方法,无需让您的服务或其他 Controller 尝试发出值已更改的信号。

如果您的服务的 getter 方法不依赖于 this,您可以通过仅将 getter 方法作为监视函数传递而不是使用包装函数来简化监视程序。

$scope.$watch(sessionService.getState, function(newValue, oldValue){
//Do something
});

关于javascript - Controller 单击即可更改另一个 Controller 的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35649625/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com