Angular ui-router 允许我解决可以在我的控制器中使用的不同注入。
我创建了一个简单的通用 ListController,并在 ui-router 中注入了一个对象,该对象包含特定于该特定视图的 CRUD 函数以及模板。
因此,例如,假设我有 2 个具有相同“crud”语法的服务:
addPerson(person, callback){}
deletePerson(person, callback){}
editPerson(person, callback){}
....
addCar(car, callback){}
deleteCar(car, callback){}
editCar(car, callback){}
....
我创建了一个映射对象来将这些服务的 CRUD 函数映射到我的通用控制器中,该控制器是通过 ui.router 注入的。
通用控制器:
controller('ListCtrl', ['$scope', 'itemList', 'functions', function ($scope, itemList, functions) {
$scope.itemList = itemList;
$scope.addItem = function(){
functions.add($scope.item, callback);
}
.....
}
路由器:
.state('app.people', {
url: '/people',
templateUrl: 'views/people.html',
resolve: {
functions: ['People', function(People){
return {
add: People.createPerson,
update: People.updatePerson,
delete: People.deletePerson,
getItemList: People.getPeopleList
}
}],
itemList: ['$q', 'People', function($q, People){
var deferred = $q.defer();
People.getPeopleList(function(resp, status){
deferred.resolve(resp);
});
return deferred.promise;
}],
},
controller: 'GenericController'
})
因此,您也可以将它与汽车一起使用,只需在其状态定义中注入不同的函数映射即可。
奇迹般有效。
但现在我希望能够在 div 中使用我的控制器,而不仅仅是在全视图中。现在问题来了:
如果我使用 ng-controller 指令,注入器将不知道提供什么作为 'itemList' 或 'functions'(这是映射对象),但如果我通过 $controller 对象实例化它,那么它不会没有自己的范围,我得到一个
Unknown provider: $scopeProvider <- $scope
因为它无法创建自己的子范围。我想我可以通过 $rootScope.$new() 或类似的东西创建一个新范围,但感觉太像黑客了,因为我是新手到角度,我认为这对于这样的事情可能是一个不好的方法..
有小费吗?