迁移到 Angular 1.3 - 基于模型数据生成视图风格文本 - 最佳方法
Migrating to Angular 1.3 - Generating view Flavour Text based on model data - best approach?
Background
在角度 1.3 中,"你不能再在角度表达式中的函数上调用 .bind、.call 或 .apply。
在 angular 1.2 中,我在控制器/指令的作用域中使用方法来为混合集合中的对象生成文本/模板。
问题示例
例如,此示例控制器包含一个数组,其中包含不同(非统一(类型和结构的对象:
app.controller('flavourText', function ($scope) {
$scope.exampleData = {
data: [
{dataType: 'a', message: 'Type A String'},
{dataType: 'b', numbers: [1,2,3,]},
{dataType: 'a', message: 'Another Type A String'},
{dataType: 'b', numbers: [1,3,3,7]},
{dataType: 'a', message: 'Last Type A String'}
]
};
);
方法
我想出了两种生成风味文本/切换模板的方法:
方法 1:使用 ng-if
<!-- FIRST WAY OF DOING THINGS -->
<ul>
<li ng-repeat="item in $scope.example.data">
<span ng-if="item.dataType === 'a'">This is an example of type A: {{item.message}} </span>
<span ng-if="item.dataType === 'b'">This is an example of type B: {{item.numbers}} </span>
</li>
</ul>
这种方法在HTML中变得非常混乱/效率低下,所以我开始使用第二种方法。
方法 2:在表达式中使用函数
在控制器中:
$scope.generateFlavourText = function (item){
if (item.dataType === 'a') {
return "This is an example of type A: " + item.message;
} else if (item.dataType === 'b'){
return "This is an example of type B: " + item.numbers;
}
};
在模板中:
<!-- FOLLOWING METHOD DOES NOT WORK IN ANGULAR 1.3 -->
<ul>
<li ng-repeat="item in $scope.example.data">
{{generateFlavourText(item)}}
</li>
</ul>
问题
指令格式化程序/解析器
我应该为此使用指令和 ngModel 格式化程序/解析器吗?
有没有更好的方法?
我应该屈服并恢复到方法 1,它变得非常混乱和混乱(+ 除非使用绑定,否则价格昂贵(。
如果我理解正确,您有一个对象数组,并且您希望以不同的方式显示它们,具体取决于其属性给出的类型。我会为每种类型创建一个模板来分隔它们,因此它们既组织良好又易于阅读/增强。
<ul>
<li ng-repeat="item in exampleData.data"
ng-include="'path/to/templates/' + item.dataType + '.html'">
</li>
</ul>
答.html:
This is an example of type A: {{item.message}}
乙.html:
This is an example of type B: {{item.numbers}}
ng-include
缓存视图,因此您不必担心效率。
相关文章:
- 如何在具有某些 UI 视图的状态中管理工厂单个请求数据
- 如何处理数据视图中项目的鼠标点击
- 每隔5秒从数据库获取数据,并通过AJAX将其发送到视图
- AngularJS:点击选项卡刷新视图中的数据
- 如何在angularjs中检查Kendo树视图数据绑定事件
- 将工厂服务数据发送到控制器,以便在视图中使用
- 从Rails视图填充HighChart数据
- 自定义筛选器不'我不使用django数据表视图创建的ajax.data.Json
- 通过jquery将网格视图数据发送到另一个页面
- 清除网络视图数据
- 在这种情况下如何获取部分视图数据
- $_POST 树视图数据
- 如何将视图数据绑定到模型属性
- 将部分视图数据传递给控制器
- 一次将网格视图数据从客户端发送到服务器端
- VueJS和vue-router:使用v-link时,视图数据不会更新
- 用编辑表单替换视图数据
- 隐藏网格视图数据,但仍可访问
- 用部分视图数据asp.net mvc5创建一个弹出窗口
- 如何将html视图数据或(Python)服务器数据传输到Angular或Javascript