2015-03-10 3 views
0

У меня есть вид на дерево. Пользователь может выбрать узел, а затем отредактировать конфигурацию этого узла. Я хотел бы узнать, изменилось ли это вообще от оригинала.AngularJS: Определить, изменилась модель

Все примеры, которые я видел в $watch, происходят на уровне области видимости и не позволяют мне видеть, когда модель изменилась. Как я могу настроить часы (или нечто подобное), которые говорят мне, какой объект был изменен так, что я могу сделать что-то вроде

$scope.itemChanged = function(item) { 
    item.hasChanged = angular.equals(item, item.original); 
} 

Я пробовал глубокие примеры часы, как в this answer, но они говорят мне только, что вся дерево изменилось, а не какой узел. например

$scope.$watch('tree', function (oldValue, newValue, scope) { 
    console.log("changed", oldValue, newValue, scope); 
}, true); 
+0

Вы считаете обязательным изменение на входах, которыми может манипулировать пользователь? – Sphaso

+0

@Sphaso Это была моя первая мысль, но я также разрешаю пользователям добавлять узлы и перемещать узлы, которые будут происходить за пределами «формы», поэтому в идеале я бы хотел отслеживать все изменения. – Chris

+0

Что бы вы хотели сделать, как только узел изменения \ добавляются и т. д.? – Sphaso

ответ

1

Я не сделал много angularjs но ваш вопрос заинтриговал меня, так что я думаю, что этот пост может помочь вам angularjs treeview. В примере есть то, что я думаю, что вы ищете, потому что оно возвращает .selectNodeHead, с которым вы можете манипулировать.

&(c.angularTreeview?(a.$watch(e,function(m,b){g.empty().html($compile(k)(a))},!1),a.selectNodeHead=a.selectNodeHead||function(a,b){b.stopPropagation&&b.stopPropagation() 

Продолжайте кодирование. Cheers

Смежные вопросы