У меня есть одна проблема. Мое требование - когда пользователь нажмет на якорный тег, появится первое подтверждающее сообщение, и если пользователь нажмет кнопку отмены, страница останется такой, какая есть, если нажать кнопку ОК, она перейдет на другую страницу. Пожалуйста, проверьте мои код ниже.
<li ui-sref-active="active" ><a ui-sref=".profile" class="pop">Profile</a></li>
<li ui-sref-active="active"><a ui-sref=".dept" class="pop" >Department</a></li>
<li ui-sref-active="active"><a ui-sref=".usermanagement" class="pop">User Management</a></li>
$('.pop').click( function(e) {
if (! confirm('You are about to leave - are you sure')) {
e.preventDefault();
//e.stopImmediatePropagation();
return false;
} else {
return true;
}
});
route.js:
var Admin=angular.module('Channabasavashwara',['ui.router', '720kb.datepicker','ngMessages','ngCapsLock','ui.bootstrap']);
Admin.config(function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/');
$stateProvider
.state('/', {
url: '/',
templateUrl: 'dashboardview/login.html',
controller: 'loginController'
})
.state('dashboard', {
url: '/dashboard',
templateUrl: 'dashboardview/dashboard.html',
controller: 'dashboardController'
})
.state('dashboard.profile', {
url: '/profile',
templateUrl: 'dashboardview/profile.html',
controller: 'profileController'
})
.state('dashboard.dept', {
url: '/dept',
templateUrl: 'dashboardview/dept.html',
controller: 'deptController'
})
.state('dashboard.princpal', {
url: '/princpal',
templateUrl: 'dashboardview/princpal.html',
controller: 'princpalController'
})
.state('dashboard.dept_head', {
url: '/dept_head',
templateUrl: 'dashboardview/depthead.html',
controller: 'deptheadController'
})
.state('dashboard.usermanagement', {
url: '/user',
templateUrl: 'dashboardview/usermangement.html',
controller: 'managementController'
})
.state('dashboard.role', {
url: '/role',
templateUrl: 'dashboardview/role.html',
controller: 'roleController'
})
.state('dashboard.editprofile', {
url: '/editprofile',
templateUrl: 'dashboardview/editprofile.html',
controller: 'adminProfileController'
})
})
Используя приведенный выше код, появляется окно подтверждения, но когда пользователь нажимает кнопку отмены, он также переходит на другую страницу, которая не должна произойти. Пожалуйста, помогите мне.
Во-первых, чтобы использовать jQuery, просто убедитесь, что он загружен перед файлом angular.js. Затем вы можете попробовать следующий образец. Для получения дополнительной информации: "Безопасный" $ применяется в Angular.JS
$scope.safeApply = function (fn) {
var phase = this.$root.$$phase;
if (phase === '$apply' || phase === '$digest') {
if (fn && (typeof (fn) === 'function')) {
fn();
}
} else {
this.$apply(fn);
}};
$scope.safeApply(function () {
$('.pop').click( function(e) {
if (! confirm('You are about to leave - are you sure')) {
e.preventDefault();
//e.stopImmediatePropagation();
return false;
} else {
return true;
}
});
});
Скорее всего, что происходит, так это то, что директива UiSref зарегистрировала событие щелчка, прежде чем вы зарегистрируете свое имя, и сначала оно будет первым. Это происходит внутри функции директивной ссылки.
Событие click запускает обработчик внутри директивы сперва, устанавливает состояние ui-router, а затем, вероятно, ожидает, что цикл дайджеста страницы изменится.
Во время этого $ timeout он запускается в ваше событие click.
Ваше прекращение распространения работает, но это не помогает, потому что мы уже установили новое состояние, и оно вступит в силу в следующем цикле дайджеста, даже если вы приостановили выполнение js с подтверждением подтверждения.
e.preventDefault();
за пределамиif