gpt4 book ai didi

javascript - 如何以正确的方式在 Angular 应用程序中的 Controller 之间共享数据

转载 作者:行者123 更新时间:2023-11-29 10:37:27 25 4
gpt4 key购买 nike

好吧,这似乎不是关于这个主题的第一个问题,但是......

我知道我们可以为此使用服务或事件,但是网上有很多帖子说我们不应该大量使用事件。

我也知道我们可以为此创建单独的服务,但在我看来,这也不太好。如何“观察”数据变化?如何通知 smth 已更改?事件?又是?...

还有每个变体的性能如何?

那么,在 Angular 应用程序中,在 Controller 之间共享数据的真正好处和可能是最佳方式究竟是什么?而且,做这件事是个好主意吗?这是否意味着我们的应用程序有问题,一些架构或概念问题?也许这有什么味道?

请指点我,给个好的建议

提前致谢

更新

这是最常见的问题,因为有时我必须这样做。我想知道它是否很好, Angular 原则是否正确?

最佳答案

一种方法是使用作用域继承:

angular.module('app', [])
.run(['$rootScope', function($rootScope){
$rootScope.sharedObj = {search:''};
}])
.controller('navCtr',['$scope',function($scope){
}])
.controller('routeCtr',['$scope',function($scope){
$scope.$watch("sharedObj.search",function(d){
$scope.data = d ? 'Searched data is ' + d : '';
});
}]);
.main div{
display:inline-block;
border:1px solid black;
height:100px;
vertical-align: top;
}

.navigation{
width: 20%
}
.navigation input{
max-width: 70%;
}

.page {
width: 75%
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="app" class="main">
<div ng-controller="navCtr" class="navigation">
search: <br/>
<input ng-model="sharedObj.search"/>
</div>
<div ng-controller="routeCtr" class="page">
{{data}}
</div>
</div>

第二种方式是共享服务:

angular.module('app', [])
.factory('srcObject',[function(){
return {
value: ''
}
}])
.controller('navCtr',['$scope', 'srcObject', function($scope, srcObject){
$scope.search = srcObject;
}])
.controller('routeCtr',['$scope', 'srcObject', function($scope, srcObject){
$scope.$watch(function(){return srcObject.value},function(d){
$scope.data = d ? 'Searched data is ' + d : '';
});
}]);
.main div{
display:inline-block;
border:1px solid black;
height:100px;
vertical-align: top;
}

.navigation{
width: 20%
}
.navigation input{
max-width: 70%;
}

.page {
width: 75%
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="app" class="main">
<div ng-controller="navCtr" class="navigation">
search: <br/>
<input ng-model="search.value"/>
</div>
<div ng-controller="routeCtr" class="page">
{{data}}
</div>
</div>

关于javascript - 如何以正确的方式在 Angular 应用程序中的 Controller 之间共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34442752/

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