gpt4 book ai didi

javascript - 如何从一个 Controller 设置一个服务的值,并使用该服务更新另一个 Controller 的值

转载 作者:行者123 更新时间:2023-11-30 11:47:38 26 4
gpt4 key购买 nike

我是这个领域的新手,想写一个应用程序,现在我遇到了一些问题。这是我的代码的一个简单版本,我想要的是 API 只首先显示 signUp。在我按下 signUp 并按下 submit 之后,显示的按钮应该只有 signout

我觉得我的方法不对,因为我在service中修改了value之后,另一个controller无法更新它的value。你能告诉我吗?请尽可能使用 this.logged,谢谢!

过程不必和我的标题一样。如果能实现我的功能就好了。

https://plnkr.co/edit/1ptaVzmD7EwPZ6dU23gR?p=preview

(function(){
angular.module('myApp',['myApp.dashboard','myApp.value','myApp.signUp']);
})();

(function(){
angular.module('myApp.dashboard',[]);
})();

(function(){
angular.module('myApp.value',[]);
})();

(function(){
angular.module('myApp.signUp',[]);
})();

(function(){
'use strict';
angular.module('myApp.dashboard').controller('mainControl',mainControl);

mainControl.$inject = ['whichToShow'];
function mainControl(whichToShow){
this.logged=whichToShow.getVar();
alert(this.logged);
}
})();



(function(){
'use strict';
angular.module('myApp.value').factory('whichToShow',function(){
alert("running2");
var logged=false;
return {
getVar: function(){
return logged;
},
setVar: function(value){
logged=value;
}

};
});
})();

(function(){
'use strict';
angular.module('myApp.signUp').controller('signUpControl',signUpControl);
signUpControl.$inject = ['whichToShow'];
function signUpControl(whichToShow){
alert("haha");
this.logIn=function(){
whichToShow.setVar(true);
alert("running set!");
};
};
})();

部分 html:

<body ng-controller="mainControl as mc">
<div>
<div ng-hide="mc.logged">
<button type="button" class="btn" data-toggle="modal" data-target=".signUp">Sign Up</button>
</div>
<div ng-show="mc.logged">
<button>Sign Out</button>
</div>
</div>


<div class="signUp modal fade" id="signUp" ng-controller='signUpControl as sc'>
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">sigh up</h4>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">&times;</button>
</div>
<div class="modal-body">
<form id="signUpForm" name="signUpForm" ng-submit="sc.logIn()">
<label for="email">
<span>email:</span>
<input type="email" name="email">
</label>
<button class="submit" id="signUpSubmit" type="submit" value="signUp">submit</button>
</form>
</div>
<div class="modal-footer">

</div>
</div>
</div>
</div>

</body>

最佳答案

基本上,您在用户点击提交后在工厂对象中设置值,但这不会反射(reflect)在 UI 中,因为您尚未更新范围对象 this.logged。所以要告诉主 Controller 注册我们可以使用 $emit$broadcast

更改 this.logged $scope 值的 Controller

除了 $watch 方法,您甚至可以使用 $broadcast 来实现这一点。

工作 DEMO

只需在您的 JS 文件 Controller 中添加以下代码

注册控件

(function(){
'use strict';
angular.module('myApp.signUp').controller('signUpControl',signUpControl);
signUpControl.$inject = ['whichToShow','$rootScope'];
function signUpControl(whichToShow,$rootScope){
alert("haha");
this.logIn=function(){
whichToShow.setVar(true);
$rootScope.$broadcast('login');//broadcasting that user has logged in
//alert("running set!");
};
};
})

主控

(function(){
'use strict';
angular.module('myApp.dashboard').controller('mainControl',mainControl);

mainControl.$inject = ['whichToShow','$rootScope'];

function mainControl(whichToShow,$rootScope){
var mc = this;
mc.main ={};
mc.main.logged=whichToShow.getVar();
alert(mc.main.logged);

// below code will listen to the broadcast and do the necessary process..
$rootScope.$on('login',function(event,args){
mc.main.logged=whichToShow.getVar();
});
}
})

关于javascript - 如何从一个 Controller 设置一个服务的值,并使用该服务更新另一个 Controller 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40415322/

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