【问题标题】:AngularJS: should I choose what to print in the view or the controller?AngularJS:我应该选择在视图还是控制器中打印什么?
【发布时间】:2016-04-28 20:28:55
【问题描述】:

我有一个用户信息视图,其中有一个包含一些用户数据的表,这些数据是从后端异步获取的。我不想打印这个对象的每个字段。

什么是更好的做法,直接在模板中选择数据或在控制器中生成一个对象,然后在模板中使用 ngRepeat?

如果我想做更复杂的事情,比如将用户组打印为 html 列表,那么哪个是更好的选择?

示例 1:在模板中选取数据

// controller.js
backendApi.userInfo($stateParams.user)
.then(function (user){
    vm.user = user;
});
<!-- view.html -->
<table class="table table-condensed">
    <tr>
        <th class="col-xs-2 col-md-1">ID</th>
        <td class="col-xs-10 col-md-11">{{vm.user.id}}</td>
    </tr>
    <tr>
        <th class="col-xs-2 col-md-1">Name</th>
        <td class="col-xs-10 col-md-11">{{vm.user.name}} {{vm.user.surname}}</td>
    </tr>
    <tr>
        <th class="col-xs-2 col-md-1">Status</th>
        <td class="col-xs-10 col-md-11">{{vm.userEnabledString(vm.user)}}</td>
    </tr>
    <tr>
        <th class="col-xs-2 col-md-1">Groups</th>
        <td class="col-xs-10 col-md-11">{{vm.user.groups.join(", ")}}</td>
    </tr>
</table>

示例 2:在控制器中选取数据并在视图中使用 ngRepeat。

// controller.js
backendApi.userInfo($stateParams.user)
.then(function (user){
    // user has more fields that I don't need to print.
    vm.user = {
        "ID": user.id,
        "Name": user.name + " " + user.surname,
        "Status" : userEnabledString(user),
        "Groups": user.groups.join(", ")
    }
});
<!-- view.html -->
<table class="table table-condensed">
    <tr ng-repeat="(key, value) in vm.user">
        <th class="col-xs-2 col-md-1">{{key}}</th>
        <td class="col-xs-10 col-md-11">{{value}}</td>
    </tr>
</table>

函数userEnabledString 打印一个布尔值的文本表示。

【问题讨论】:

    标签: angularjs model-view-controller mvvm angularjs-ng-repeat angularjs-controller


    【解决方案1】:

    除非它不能满足你的需要,否则你为什么不使用现有的重新设计的 Angular 控件。

    请参考下面的控件,使用方便。

    http://angular-ui.github.io/ui-grid/

    【讨论】:

    • 这对我的需求来说似乎有点矫枉过正,而且似乎不容易设计。不过,他们似乎使用这种方法在控制器而不是视图中设置数据。
    猜你喜欢
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 2015-09-15
    • 2010-12-25
    • 1970-01-01
    • 2011-10-21
    • 2010-10-22
    相关资源
    最近更新 更多