Подтвердить что ты не робот

Вызывать функцию при запуске ng-show?

Я хочу показать лайтбокс с содержимым, открытым ng-show, но я не знаю, как запускать лайтбокс JS. Я ищу что-то вроде

ng-on-show="showLightbox()"
4b9b3361

Ответ 1

Я думаю, было бы лучше $смотреть вашу модель, на которой привязано ng-show.

Вот пример:

<div ng-app="myApp" ng-controller="myCtrl" ng-init="isDisplayed = true">
    <div ng-show="isDisplayed">something</div>
    <button ng-click="isDisplayed = !isDisplayed">Toggle</button>
</div>

var myApp = angular.module('myApp', [])
.controller('myCtrl', function($scope, $log) {
    $scope.$watch('isDisplayed', function(newValue, oldValue) {
        if (newValue !== oldValue) {
            $log.log('Changed!');
        }
    });
});

и fiddle

Ответ 2

Ну, ng-show берет логическое значение, поэтому ваш лучший вариант для его использования - вызывать функцию showLightbox где-то в логике, которая устанавливает ng-show.

$scope.reasonToShow = false;

$scope.showSomething = function(myCondition){
    if(myCondition){
        showLightbox();
        $scope.reasonToShow = true;
    }
};

<div ng-show='reasonToShow'></div>

Вы можете сделать что-то подобное с часами $, если вам нужно.

Ответ 3

как насчет более простого подхода?

скажем, у вас есть такой элемент:

<div ng-show="someBooleanValue"></div>

Если вы используете оператор AND после displayMyDiv и помещаете туда обратный вызов, обратный вызов будет выполняться только в том случае, если первое значение TRUE (что работает логический оператор И). Так вот что я пробовал с помощью angular 1.15.10, и он работает:

$scope.showLightbox = function() {
  // your logic goes here
  return true;
}

<div ng-show="someBooleanValue && showLightbox()"></div>

Если и только если someBooleanValue истинно, тогда будет также оцениваться $scope.showLightbox(). Поэтому вам нужно будет сделать $scope.showLightbox(), чтобы вернуть TRUE, иначе ваш div не будет виден.

Этот способ не только упрощен, но и обрабатывает реализацию наблюдателя до angular (меньше кода для поддержки), а возврат обратного вызова будет оцениваться только в том случае, если someBooleanValue изменяется на TRUE.