Можете ли вы вызвать фальшивое изменение состояния в AngularJS?

Megawatt спросил: 12 мая 2018 в 03:51 в: javascript

Скажите в функции контроллера, что-то вроде этого:

$scope.fakeChangeState = function() {
    $state.go('stay right here and do nothing');
}

И затем вызовите его при нажатии кнопки:

<button ng-click="fakeChangeState()">click</button>

Возможно ли что-то подобное?

Существует директива, которую я хочу активировать, когда нажаты некоторые кнопки на сайте. Директива активируется с помощью "$ stateChangeStart".

Директива активируется просто отлично при переходе на другую страницу, используя, например, панель навигации. Однако есть кнопки, которые не являются частью навигации, которые меняют только вид (т. Е. Редактируют содержимое на странице без изменения состояния при нажатии).

Как мы активируем директиву изменения состояния, без изменения состояния?

2 ответа

BShaps ответил: 12 мая 2018 в 03:58

Вы можете использовать событие $stateChangeStart, чтобы предотвратить переход в другое состояние (т. е. состояние по умолчанию). Я не уверен, когда ваша директива срабатывает, поэтому может быть слишком рано для активации директивы сохранения.

$rootScope.$on('$stateChangeStart',
function(event, toState, toParams, fromState, fromParams){
    event.preventDefault();
    // transitionTo() promise will be rejected with
    // a 'transition prevented' error
})
Megawatt ответил: 12 мая 2018 в 04:02
Спасибо, но директива save уже запускается с использованием '$ stateChangeStart', и маршрут не настроен для ссылок, чтобы отправлять их в другое место или они не запрашивают изменение состояния.
BShaps ответил: 12 мая 2018 в 04:18
@Megawatt Если мой ответ не тот, который вы ищете, тогда ваш вопрос неправильно сформулирован и должен быть обновлен. Это правильный способ предотвратить изменение состояния от фактического использования с помощью $stateProvider и $state.go(), что и было вами.
Megawatt ответил: 12 мая 2018 в 04:32
Ну, вопрос не в том, "Как предотвратить изменение состояния?" это больше похоже на то, как я "вызывать изменение состояния, но остаюсь в одном состоянии", то есть изменение поддельного состояния
BShaps ответил: 12 мая 2018 в 04:35
Это вызывает изменение состояния, но остается в том же состоянии. Вы просто перехватываете его до того, как он перейдет и остановит переход, что является единственным способом выполнить это, кроме как выполнить $state.reload. Взгляните на вопрос SO в моем комментарии выше. Из всего, что я слышал, звучит так, что вы пытаетесь достичь. Было бы легче помочь, если бы мы могли видеть код директивы
Megawatt ответил: 12 мая 2018 в 04:41
Может быть, я просто ужасно объясняю проблему. На сайте есть кнопки, и при нажатии кнопок не происходит изменения состояния. Я пытаюсь заставить их делать изменения состояния, но они нигде не связаны или не делают ничего, кроме обновления некоторых переменных. "$ stateChangeStart" здесь не поможет, поскольку кнопки не вызывают никакого изменения состояния, поэтому "$ stateChangeStart" даже не активируется. Как заставить кнопки изменять состояние, но ничего не делать? то есть изменение поддельного состояния
Megawatt ответил: 12 мая 2018 в 08:42

Решил это, просто скопировав код из директивы и введя его в код контроллера, который активируется при нажатии кнопок. По-видимому, я не очень хорошо объяснял, в чем проблема, но просто копирование кода за решет проблему. Это сделало так, чтобы директива не должна была запускаться вообще.