如何使用AngularJS服务更改父控制器的对象实例?

时间:2015-09-18 19:28:20

标签: angularjs angularjs-scope angularjs-service

我使用嵌套控制器和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

2 个答案:

答案 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方法来存储和检索对象。

在我的情况下,父视图和子视图都可以更改我缓存的对象,但用户只能从父提交。