比较对象的属性,如果不同则更改元素类/工具提示

时间:2015-09-24 14:27:04

标签: angularjs angularjs-directive angularjs-ng-repeat

使用以下代码:

public class Person {
    private Long id;
    private String name;
    private List<Dog> dogs;
}

public class Dog {
    private Long id;
    private Long oldId;
    private Long age;
}

我有2个Person对象,'person'和'editedPerson'。我想比较两者,如果一个属性不同,则更改元素的类并创建一个显示另一个对象属性值的工具提示。我希望能够在ng-repeat中执行此操作,根据他们的id / oldId比较人员列表中的Dog属性(将ng-repeat中的狗与具有与dog的id相同oldID的狗进行比较)< / p>

这是我迄今为止所做的一个例子:

<b ng-class="{ 'different' : person.name != editedPerson.name)}"
tooltip="{{(person.name != editedPerson.name) ? 'New: ' + editedPerson.name : ''}}">
Name:</b>
<p>{{person.name}}</p>

问题在于我将拥有很多属性,其中一些属于不同类型的列表。到目前为止,我对List的解决方法是为每个属性创建一个函数,例如

compareDogAge = function(dog, dogs) {
    // Foreach on dogs until dogs[i].oldId == dog.id, return true if age is equal
}

我想知道我是否应该保留当前的解决方案,或者尝试制定/找到可以解决我的问题的指令(我对制定指令的经验很少)。

提前致谢

修改

到目前为止,我提出了以下功能,但尚未对其进行测试

equals = function(fieldName, originalObj, newObj) {
    if (newObj instanceof Array) {
        for (var i = 0; i < newObj.length; i++) {
            if (originalObj.id == newObj[i].oldId) {
                return originalObj[fieldName] == newObj[i][fieldName];
            }
        }
    } else if (newObj instanceof Object){
        return originalObj[fieldName] == newObj[fieldName];
    }
}

我仍然认为指令会更好

1 个答案:

答案 0 :(得分:1)

Angular有一个等于的功能,不是你想要的吗?

https://docs.angularjs.org/api/ng/function/angular.equals

@echo off
SETLOCAL ENABLEEXTENSIONS

echo Verify .Net Framework Version

for /f "delims=" %%I in ('dir /B /A:D %windir%\Microsoft.NET\Framework') do (
    for /f "usebackq tokens=1,3 delims= " %%A in (`reg query "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\%%I" 2^>nul ^| findstr Install`) do (
        if %%A==Install (
            if %%B==0x1 (
                echo %%I
            )
        )
    )
)

echo Do you see version v4.5.2 or greater in the list?

pause

ENDLOCAL 

修改

指令确实将此逻辑添加到您的组件中,如下所示:

HTML

2^>nul

angular.equals(person, editedPerson);

小提琴:http://jsfiddle.net/marcosspn/8ucakhk5/