У меня есть поле формы (входной текст) с ng - если оно было ложным в начале. В какой-то момент значение ng-if станет истинным.
Когда это произойдет, я хочу выполнить некоторый javascript, который управляет DOM. Чтобы это было просто, скажем, что мне нужно выбрать входное значение и сфокусировать поле.
<input type="text" ng-value="foo" ng-if="show" onshow="doSomething()"/>
<button ng-click="toggle()"></button>
JavaScript
ctrl.foo = "bar";
ctrl.show = false;
ctrl.toggle = function(){
ctrl.show = !ctrl.show;
}
Я знаю, что это похоже на "неугольный подход", но здесь я думаю, что действие не связано с моделью.
Поскольку ng-if
директива выполнить шаблон каждый раз, когда show
станет правдой, вы можете использовать ng-init
для этого. Смотрите следующий фрагмент и замените alert('test);
чем угодно.
angular.module('test', []).controller('test', function($scope, $element) {
$scope.show = false;
$scope.toggle = function() {
$scope.show = !$scope.show;
};
$scope.init = function() {
alert($element.find('input').val());
};
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="test">
<div ng-controller="test">
<input type="text" value="foo" ng-if="show" ng-init="init()" />
<button ng-click="toggle()">Toggle</button>
</div>
</div>
do-something="show"
. Когдаshow
true, директива запускается. Это было бы похоже на ng-if, поскольку, когда show имеет значение true, ng-if отображает html.