Angularjs 从子状态访问父控制器
我在AngluarJS中有一个控制器,定义如下: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
'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上,但我个人从来没有这样做过。我仍然会沿着工厂的路线走。这样,在将来需要共享更多数据的情况下,它将非常有用。