AngularJS AngularJS 如何跨 ng-view 传递 model?

evil850209 · 2013年06月06日 · 最后由 evil850209 回复于 2013年06月07日 · 15641 次阅读

我有两个 view 分别用两个 controller

app.config([ '$routeProvider', function($routeProvider) {

  $routeProvider.when('/', {
    templateUrl : 'reportServer',
    controller : ReportServerController
  }).when('/reports', {
    templateUrl : 'reports',
    controller : ReportsController
  }).otherwise({
    redirectTo : '/'
  });

} ]);

var ReportServerController = function($scope, $http, $location) {

  $scope.connect = function(server) {

    if ($scope.reportServerForm.$invalid) {
      alert("Please input Report Server Information!");
      return false;
    }

    $http.post('reports/connect', server).success(function(data) {
      // need some code here
      $location.path('reports');
    }).error(function(error) {
      alert(error);
    });
  };

};

当 connect 方法被执行后,我想把返回的 data 对象传递给下一个 angular 的 view,data 对象是一个 json 对象,不是单一的字符串,好像用 routeParameters 不太好吧?有没有其他方法将 data 直接绑定到 ReportsController 的$scope 上呢?

用 service、$rootscope 或者 $on

@saiga 可否给例子 :)

$rootscope 是应用程序级别数据共享 $on 是自定义事件触发,可以带参数

#2 楼 @evil850209 最常见的做法是用 service 共享数据,所有的 $scope 都继承自 $rootscope,所以不能随便向里面加数据。这是我之前的应用: service:

angular.module('docat.services', ['ngResource'])
  .factory '$shared', ($doCat, $routeParams) ->
    groups: {}
    per: ->
      if screen.height <= 768
        8
      else
        14
    # ...

controller:

@DocsViewController = (...., $shared, ...) ->
  #...
  $shared.per()

@saiga 看来还是放在 service 里比较好

需要 登录 后方可回复, 如果你还没有账号请 注册新账号