簡體   English   中英

AngularJS過濾不帶ng-repeat的對象的單個屬性

[英]AngularJS filter single property of object without ng-repeat

我需要有關AngularJS過濾器的幫助。..(Angularjs 1.2.7)

這是我的問題:

我有一個這樣的班級用戶。

Public Class User
    Public Property UserID As Integer
    Public Property EMail As String
    Public Property Password As String
    Public Property Firstname As String
    Public Property Lastname As String
    Public Property Creator As Integer
    Public Property LastEditedBy As Integer
    Public Property Company As Company
End Class

和這樣的公司類別:

Public Class Company
    Public Property CompanyID As Integer
    Public Property Name As String
    Public Property RegistrationDate As String
    Public Property Creator As Integer
    Public Property LastEditDate As String
    Public Property LastEditedBy As Integer
    <ScriptIgnore>
    Public Property Users As List(Of User)
    Public Property Companytype As Companytype
    <ScriptIgnore>
    Public Property PriceLists As List(Of CompanyPriceList)
End Class

好吧,現在集中討論我公司或用戶類別中的2個屬性(Creator和LastEditedBy)。 我想在單個公司視圖中獲得公司創建者和編輯者的名字和姓氏。

有了這個:

companyManagement.getCompany = function (companyId) {
    var cmp = $filter('getCmpById')(companyId);
    return cmp;
};

我得到了整個公司,並用這兩個整數作為對象。現在,在我的GUI中,我想顯示屬於此ID的用戶的名字和姓氏。

app.filter('getUsrById', function (userManagement) {
var users = userManagement.getUsers();
return function (list) {
    var i = 0, len = users.length;
    for (; i < len; i++) {
        //convert both ids to numbers to be sure
        if (+users[i].UserID == +list) {
            return users[i];
        }
    }
    return "not found";
};

});

使用此過濾器,我得到了屬於id的整個用戶對象。 現在有什么方法可以顯示用戶的兩個屬性嗎? 像這樣

 <span data-ng-model="creatorFirstname">{{ user.firstname | getUsrById:{userId:singleCompany.Creator} }}</span>
 <span data-ng-model="creatorLastname">{{ user.lastname | getUsrById:{userId:singleCompany.Creator} }}</span>
 <span data-ng-model="editorFirstname">{{ user.firstname | getUsrById:{userId:singleCompany.LastEditedBy} }}</span>
 <span data-ng-model="editorLastname">{{ user.lastname | getUsrById:{userId:singleCompany.LastEditedBy} }}</span>

我不想將Properties聲明為User,因為我在兩個類中都擁有它們,並且我希望保持一致性。 不在User-> Integer和Company-> As User中,所以我可以忽略它們並將舊數據發送回服務器,因為LastEditedBy屬性始終被它覆蓋,而Creator屬性始終保持不變。

謝謝你的幫助!

不確定篩選器是否是執行此處所需操作的正確機制。 我認為,最自然的編碼方式是在您的范圍內具有companylastEditedBycreator屬性,並確定哪些用戶是您感興趣的用戶並將其添加到您的公司模型中。

檢索公司后,在成功處理程序中添加幾行(此處使用下划線js來獲取用戶

$scope.lastEditedBy = _.findWhere( $company.users, { UserID : $company.LastEditedBy } );
$scope.creator = _.findWhere( $company.users, { UserID : $company.Creator } );

然后,您只需要引用lastEditedBycreator所需的任何屬性:

<span>{{lastEditedBy.firstname}}</span>
<span>{{lastEditedBy.lastname}}</span>
<span>{{creator.firstname}}</span>
<span>{{creator.lastname}}</span>

實際上,您可以使用$ filter做到這一點,只需返回單個值並像這樣抓取零即可...實際上,您可以創建自己的findWhere過濾器:

lrApp.filter('findWhere',function($filter){
    return function(collection,search) {
        var refined = $filter('filter')(collection,search);
        return refined[0];
    }
});

$filter('findWhere')($scope.users,{ UserID : $company.LastEditedBy });

甚至更好,我已經測試過了

angular.findWhere = function(collection,search) {
    var $filter = angular.element(document).injector().get("$filter"),
        refined = $filter('filter')(collection,search);
    return refined[0];
}

顯然,您需要用啟動應用程序的任何節點替換“ angular.element(document)”,而我這樣做是因為我將此函數放置在run函數之外,但是如果將其放置在run函數中您只需注入$ injector服務,然后將“ angular.element(document).injector()”更改為“ $ injector.get(” $ filter“)”,甚至只是將$ filter注入運行函數即可。

我知道這個問題太老了,無法回答,但可能會對其他人有所幫助。

<span ng-bind="(users | filter : {UserID : singleCompany.Creator } : true)[0].firstname"></span>
<span ng-bind="(users | filter : {UserID : singleCompany.Creator } : true)[0].lastname"></span>
<span ng-bind="(users | filter : {UserID : singleCompany.LastEditedBy } : true)[0].firstname"></span>
<span ng-bind="(users | filter : {UserID : singleCompany.LastEditedBy } : true)[0].lastname"></span>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM