标题有点模棱两可,但这就是问题所在。
假设我在 AngularJS 中工作,并且我有几个基本上需要相同逻辑的视图。
代码概述
应用程序.js
$routeProvider
.when('/sheet/:sheetid/:screenid', {
templateUrl: 'views/sheet.html',
name: 'sheets',
controller: 'SheetCtrl'
});
索引.html
<div class="container" ng-view></div>
共享控制器 现在这是我脑海中浮现的部分。我需要这个控制器来处理所有 10 张纸。现在我正在通过一项服务加载工作表的数据/模型,该服务目前正在运行。问题是,每个 sheetid 共享大量代码,但它们也可能彼此不同。
例如:
sharedController.js
angular.module('App')
.controller('SheetCtrl', function ($scope, $routeParams, sheets) {
$scope.sheetid = $routeParams.sheetid;
/** GET THE SHEET */
//Gets the correct model from the sheets service (via promise)
$scope.sheetData = sheets.getSheet($scope.sheetId);
/** FACTSHEET SPECIFIC LOGIC */
//TODO: Figure out how to load specific factsheet controls in here
/* THE LOGIC FOR ALL THE SCREENS. WE NEED THIS AT ALL TIMES */
$scope.setScreen = function(index) {
...
};
//there are some more functions here that need to be shared
});
观点也是个问题
每张纸都必须在同一个模板中进行解析。问题是即使这些模板也可能有微小的差异,并且仅来自嵌套在此模板中的一个 div。我想将 sheetID 特定的控制器逻辑分配给工作表内容,并为工作表内容提供它自己的模板/视图。
<div class="sheet">
<div>
<a href="/#/" class="close">close</a>
</div>
<div class="sheet-content">
<!-- Assume sheet specific controller code to target this div-->
</div>
</div>
怎么办?
不太确定如何从这里继续。似乎我应该能够以某种方式动态地将特定 sheetID 的控制器逻辑分配给 sheet-content div 并在此处分配模板。我真的在寻找尽可能干净和干燥的方法。
例如,我可以复制/粘贴视图和 sharedController 10 次并将它们分配给每个可能的路径,但我真的不想重复自己。
另一个问题是每个资料单都应该以某种方式建立自己的模型。现在我正在通过具有预定义数据的服务来执行此操作,但如果特定控制器正在处理它,那将是最干净的。问题是当我将该逻辑放在特定控制器中时,sharedControllers 不能再使用该模型并且不会再次构建。
如果有人能指出我正确的方向,我会很高兴的。