作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 AngularJS 1.5 及其组件创建某种通用 GridView 。我现在要做的(伪代码)版本:
// inside <my-grid-component data="data" metadata="metadata">
<div ng-repeat="item in $ctrl.data">
<my-row-component item="item" metadata="$ctrl.metadata"></my-row-component>
</div
// inside <my-row-component item="item" metadata="metadata">
<div ng-repeat="column in $ctrl.metadata.columns">
<my-cell-component value="$ctrl.item[column]"></my-cell-component>
</div>
<my-cell-component>
可以有一些基本的
ng-switch
处理明显情况的语句,例如值是文本或图像或其他东西,但由于这将被许多人和许多项目使用,因此有人可能想要在内部做一些花哨和/或高度具体的事情一个细胞。他们可以修改
<my-cell-component>
更多
ng-switch
es,但随后它们会弄乱基本框架代码,这会损害可维护性。
metadata.columns[3].customCellComponentName = 'some-custom-template';
然后
<my-row-component>
看起来像这样:
<div ng-repeat="column in $ctrl.metadata.columns">
<div ng-if="!column.isCustomCellComponent">
<my-cell-component value="$ctrl.item[column]"></my-cell-component>
</div>
<div ng-if="column.isCustomCellComponent">
??? --> <column.customCellComponentName value="$ctrl.item[column]"></column.customCellComponentName>
</div>
</div>
ng-include
和其他解决方案,但似乎都没有提供动态加载模板和模型绑定(bind)一些数据的选项。
最佳答案
您可以为您的 <my-cell-component>
创建一个指令这样它要么接受 templateUrl
或者它确定templateUrl
并使用它。让我给你一个后者的例子,
angular.module('myApp')
.directive('myCellComponent', ['CELL_TYPE', function (CELL_TYPE) {
return {
restrict: 'E',
scope:{
cellType: '='
},
template: '<div ng-include="templateUrl"></div>',
link: function (scope) {
function setTemplate(cellType) {
scope.templateUrl = CELL_TYPE[cellType.value].templateUrl;
// or figure out some other way to determine templateUrl
}
scope.$watch(function () {
return scope.cellType;
}, function (newVal) {
if(newVal) {
setTemplate(scope.cellType);
}
});
}
};
}]);
ng-include
的指令模板。使用
templateUrl
根据一些常数确定,例如
CELL_TYPE
.
$watch
如果动态更改
templateUrl
不适用于您的用例。
关于angularjs - Angular 1.5 : dynamically load a component,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36544681/
我是一名优秀的程序员,十分优秀!