Angularjs 从子状态访问父控制器

Angularjs 从子状态访问父控制器,angularjs,angular-ui-router,Angularjs,Angular Ui Router,我在AngluarJS中有一个控制器,定义如下: 'use strict'; var app = angular.module('app'); app.controller('AppCtrl', ['sth', function (sth) { this.inverse = false; } ]); 以下是路线定义: $stateProvider. state('app', { abstract: true, templateUrl: 'ap

我在AngluarJS中有一个控制器,定义如下:

'use strict';

var app = angular.module('app');

app.controller('AppCtrl', ['sth',
    function (sth) {
        this.inverse = false;
    }
]);
以下是路线定义:

$stateProvider.
state('app', {
    abstract: true,
    templateUrl: 'app/views/layout.html',
    controller: 'AppCtrl',
    controllerAs: 'app',
    resolve: {}
}).
state('app.settings', {
    abstract: true,
    url: '/settings',
    template: '<ui-view/>',
    onEnter: function () {

    }
});
$stateProvider。
状态('应用'{
摘要:没错,
templateUrl:'app/views/layout.html',
控制器:“AppCtrl”,
controllerAs:“应用程序”,
解析:{}
}).
状态('应用程序设置'{
摘要:没错,
url:“/settings”,
模板:“”,
onEnter:function(){
}
});

如何从app.settings路由中的AppCtrl访问反向变量?

如果要在两个控制器之间共享数据,最好选择服务/工厂。下面是一个你将如何做的例子。我是徒手写的,所以可能会有语法错误,但你明白了

app.controller('AppCtrl', ['sth', 'SharedData',
    function (sth, SharedData) {
        SharedData.inverse = false;
    }
]);

app.factory('SharedDate', function() {
  var data = {
     inverse: true  // or whatever default value you want to set
  };

  return data;
})

现在,您可以在任何控制器中插入SharedData factory,您希望在其中使用该数据。

如果您希望在两个控制器之间共享数据,最好选择一个服务/工厂。我知道我可以使用服务,但我觉得仅对变量更改而言,这是一种过分的做法。如果我使用$scope.inverse而不是this.inverse,则可以从children范围访问它。我希望在我的方法中也能做到这一点。另一种方法是将它设置在rootScope上,但我个人从来没有这样做过。我仍然会沿着工厂的路线走。这样,在将来需要共享更多数据的情况下,它将非常有用。