mam ten pracuje teraz. Oto podejście, które działa dla mnie, aby wprowadzić szablon Angular Controller + w pakiecie Meteor, do aplikacji zawierającej.
W moich package.js, mam ten
Package.onUse(function(api) {
api.versionsFrom('1.1.0.3');
api.use('angular:[email protected]', 'client');
api.use("urigo:[email protected]", 'client');
api.use("[email protected]", 'client');
//api.use('angularui:[email protected]', 'client');
api.addFiles('interests.js', 'client');
api.addFiles('interests.ng.html', 'client');
api.export("InterestsCtrl", "client")
});
Uwaga należy wyeksportować swój kontroler, dzięki czemu aplikacja rodzic może go otworzyć.
W moim pakiecie, zwany zdezelowany: bigd-interesy, mam te pliki na poziomie root: package.js, interests.ng.html i interests.js. interests.js wstrzykuje kontroler Angular, ścieżkę Anguilar UI-router do szablonu i link paska bocznego do aplikacji nadrzędnej. Osiąga to, wykorzystując sesję Meteorytów. Grałem z innymi sposobami, ale Sesja była jedyną rzeczą, która działała. Po prostu zachowaj ostrożność, aby odpowiednio zawęzić nazwy zmiennych sesji.
//add controllers
var controllers = Session.get("BIGD.controllers");
if (!controllers) controllers = {};
var interestsCtrlSpec = "'$scope', InterestsCtrl";
InterestsCtrl = function($scope){
console.log("InterestsCtrl running");
};
controllers.InterestsCtrl = interestsCtrlSpec;
Session.set("BIGD.controllers", controllers);
//add routes
var routes = Session.get("BIGD.routes");
if (!routes) routes = {};
routes.interests = {
url: '/interests',
templateUrl: 'ramshackle_bigd-interests_interests.ng.html',
controller: 'InterestsCtrl'
};
Session.set("BIGD.routes", routes);
//add sidebar links
//the key determines sorting order
var sidebar = Session.get("BIGD.sidebar");
if (!sidebar) sidebar = {};
sidebar["interests"] = {
url: '/interests',
templateUrl: 'ramshackle_bigd-interests_interests.ng.html',
controller: 'InterestsCtrl',
rank: 5
};
Session.set("BIGD.sidebar", sidebar);
var interestsItem = {label: 'Interests', link: '/interests', icon: "rocket"};
w mojej aplikacji macierzystej aplikacji.js, dynamicznie ładowane kontrolerów i tras z sesji tak:
angular.module('bigdam',[
'angular-meteor',
'ui.router',
'angularify.semantic.sidebar',
'nvd3',
'leaflet-directive',
'ui.router.history'
])
.config(['$urlRouterProvider', '$stateProvider', '$locationProvider',
function($urlRouterProvider, $stateProvider, $locationProvider){
//console.log("app.js config!");
$locationProvider.html5Mode(true);
//add a static state
$stateProvider
.state('home', {
url: '/',
templateUrl: 'client/views/home/home.ng.html',
controller: 'HomeCtrl'
});
//add the dynamic routes/states from other Meteor packages
for (var stateId in routes) {
var route = routes[stateId];
$stateProvider
.state(stateId, route);
}
$urlRouterProvider.otherwise('/');
}])
;
//Declare the controllers from plugins
for (var controllerId in controllers) {
var controllerSpec = controllers[controllerId];
var controllerSpecArray = eval("[" + controllerSpec + "]")
angular.module('bigdam').controller(controllerId, controllerSpecArray);
}
Więc teraz, gdy tworzę nowy pakiet Meteor i postępuj konwencja opisano powyżej, jej sterowniki, trasy i linki bocznym dostać ładowane do głównej aplikacji.