AngularJS过滤对象的单个属性,不重复ng



我需要一些AngularJS过滤器的帮助。。(Angularjs 1.2.7)

这是我的问题:

我有一个像这样的类User。

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属性(创建者和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,因为我在这两个类中都有它们,并且我想要一点一致性。不在用户->作为整数在公司->作为用户所以我可以忽略它们并将旧数据发送回服务器,因为LastEditedBy属性总是被它覆盖,Creator属性总是保持不变。

谢谢你的帮助!

不确定过滤器是否是执行您想要的操作的正确机制。我认为最自然的编码方式是在您的作用域中具有公司lastEditedBy创建者属性,并确定哪些用户是您感兴趣的用户,并将它们添加到您的公司模型中。

当你的公司被检索到时,在你的成功处理程序中添加几行(这里使用下划线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 filter:

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作用

我知道这个问题太老了,无法回答,但它可能会帮助其他人。

<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>

最新更新