我使用嵌套控制器和UI-Router。我的顶级控制器名为MainCtrl
,位于我应用的index.html
文件中。如果MainCtrl
使用服务,要传递数据,如何使用MainCtrl
从子控制器更改{{1>}中的对象实例而不使用 ?
这基本上就是我所拥有的(从记忆中输入):
$scope
用户@shershen发布了对另一个问题的回复,该问题让我想到了使用var mainCtrl = function (ProfileSvc) {
var vm = this;
vm.profile = ProfileSvc.profile;
};
var loginCtrl = function (ProfileSvc, AuthSvc) {
var vm = this;
vm.doLogin = function (form) {
if (form.$error) { return; }
AuthSvc.login(form.user, form.pass).
.then(function(response) {
ProfileSvc.profile = response.data.profile;
}, function(errResponse) {
// error
}
};
};
和一个事件,但我真的不想在我的代码中引用$scope.$on
:
Propagating model changes to a Parent Controller in Angular
答案 0 :(得分:1)
我认为如果不使用$scope
,您可能希望在视图中使用Controller as ctrl
。所以......
var mainCtrl = function (ProfileSvc) {
var vm = this;
vm.profile = ProfileSvc.profile;
vm.updateProfile = function(profileAttrs) {
vm.profile = ProfileSvc.update(profileAttrs);
}
};
然后在视图中,有以下几点:
<div ng-controller="mainCtrl as main">
<button ng-click="main.updateProfile({ name: 'Fishz' })">
</div>
希望这有帮助!
答案 1 :(得分:0)
我必须在项目上做类似的事情,最后使用$ cacheFactory。首先只需将其作为服务加载,例如:
myApp.factory('appCache', function($cacheFactory) {
return $cacheFactory('appCache');
});
然后确保将appCache注入控制器,然后在控制器中调用缓存服务的put和get方法来存储和检索对象。
在我的情况下,父视图和子视图都可以更改我缓存的对象,但用户只能从父提交。