Я использую подкоманду sync
hub для автоматизации этого. Хаб псевдонимов как git
, поэтому введите команду:
git sync
Это обновляет все локальные ветви, имеющие соответствующую ветку вверх по течению. На странице man:
blockquote>
- Если локальная ветка устарела, перетащите ее вперед,
- Если локальная ветка содержит непроверенную работу, предупредите об этом; / g4]
- Если ветка кажется объединенной, и ее ветвь восходящего потока была удалена, удалите ее.
Он также обрабатывает фиксированные / неработающие незафиксированные изменения в текущей ветке.
Я использовал подобный инструмент под названием git-up , но он больше не поддерживается, а
git sync
выполняет почти то же самое.
Вы ответили на свой вопрос в названии! '='
просматривается, а '&'
не
ng-model
изменяется значение и срабатывает ng-change()
ng-change добавляет $ viewChangeListener и называется этим же циклом. См .: реализация ngModel.js # L714 и ngChange.js . В то время $scope.searchFilter
не обновлялся. Предыдущее значение Console.log searchFilter
обновляется привязкой данных. UPDATE: только в качестве POC, для которого вам нужен 1 дополнительный цикл для значение для распространения вы можете сделать следующее. См. Другой anwser (@NewDev для более чистого подхода).
.controller('mainCtrl', function ($scope, $timeout){
$scope.loadResults = function (){
$timeout(function(){
console.log($scope.searchFilter);
});
};
});
Причина поведения, как справедливо указано в другом ответе, состоит в том, что двусторонняя привязка не имела возможности изменить внешний searchFilter
к моменту времени searchChange()
и, следовательно, loadResults()
был вызван.
Решение, однако, очень хакерское по двум причинам.
Один, вызывающий (пользователь директивы), не должен знать об этих обходных решениях с помощью $timeout
. Если ничего другого, $timeout
должно было быть сделано в директиве, а не в контроллере View.
И два - ошибка, также сделанная OP - заключается в том, что использование ng-model
происходит с другими " ожидания "пользователями таких директив. Если ng-model
означает, что рядом с ним могут использоваться другие директивы, такие как валидаторы, парсеры, форматирующие элементы и слушатели смены вида (например, ng-change
). Чтобы поддерживать его правильно, нужно require: "ngModel"
, а не привязываться к его выражению через scope: {}
. В противном случае все будет работать не так, как ожидалось.
Вот как это делается - для другого примера см. официальную документацию для создания пользовательского элемента управления вводом.
scope: true, // could also be {}, but I would avoid scope: false here
template: '<input ng-model="innerModel" ng-change="onChange()">',
require: "ngModel",
link: function(scope, element, attrs, ctrls){
var ngModel = ctrls; // ngModelController
// from model -> view
ngModel.$render = function(){
scope.innerModel = ngModel.$viewValue;
}
// from view -> model
scope.onChange = function(){
ngModel.$setViewValue(scope.innerModel);
}
}
Затем ng-change
просто работает автоматически, а также другие директивы, которые поддерживают ngModel
, например ng-required
.
$timeout
и привязка непосредственно к ngModel
неверен и может привести к неожиданным результатам. Например, предположим, что вы хотели использовать ng-model-options
с debounce
в своей директиве - это не имело бы никакого эффекта. Как я уже сказал, использовать ng-model
означает, что вы поддерживаете ngModelController
«framework».
– New Dev
23 October 2015 в 16:42
$timeout
, хотя, если я все еще хочу, чтобы валидация работала, но я мог бы поменять $eval
на ngModel.$setViewValue(angular.copy($scope.searchModel))
. Я могу переключиться на это, хотя я не в восторге от необходимости копировать весь объект каждый раз, когда что-то меняется
– Robby Allsopp
23 October 2015 в 19:27
ngModel
. На самом деле, я уверен, что с вашим подходом $timeout
это не сработало бы, так как изменение напрямую через привязку области привязки обходит анализы и валидаторы. И вам нужно создать новый объект для «изменения», зарегистрироваться.
– New Dev
23 October 2015 в 21:29
require: '^ngModel'
? Можете ли вы сделать Plunker?
– Suamere
31 October 2016 в 21:42
$rootScope
и распространяется вниз? Если бы на этом пути был третийng-change
, потребовалось бы больше циклов дайджеста для достижения значения для контроллера? – Artless 16 October 2015 в 20:51=
варов, используя знаменитую угловую «привязку данных» .. которая в основном является$watch
. Каждый цикл цикла дайджеста выполняет грязную проверку, и когда он обнаруживает изменение, копирует значение «вручную». Таким образом, когда переменная директивы изменяется, ей нужно скопировать $ digest в «родительский» (в то время как & amp; - прямой доступ) – aacotroneo 16 October 2015 в 22:26input
запускает i> цикл дайджеста (он не «происходит» во время дайджеста), а в его первой итерацииsearchModel
установлен, аsearchChange()
(что приводит кloadResults()
). Затем на второй итерацииsearchFilter
установлен ... Но это обходное решение очень хаки. – New Dev 16 October 2015 в 23:58