Javascript 按钮不在$timout/setTimeout内工作|角度和离子
我想显示一个弹出窗口,但有点延迟。问题是,当我不延迟弹出时,按钮不工作,当我添加延迟时,按钮不显示!我在网上读到,$timeout是一个异步函数,但这不是问题所在,是吗 弹出窗口:Javascript 按钮不在$timout/setTimeout内工作|角度和离子,javascript,angularjs,ionic-framework,scope,Javascript,Angularjs,Ionic Framework,Scope,我想显示一个弹出窗口,但有点延迟。问题是,当我不延迟弹出时,按钮不工作,当我添加延迟时,按钮不显示!我在网上读到,$timeout是一个异步函数,但这不是问题所在,是吗 弹出窗口: var myPopup = $ionicPopup.show({ templateUrl: 'templates/components/welcomePopup.html', scope: $scope, buttons: [{ text: 'Hejdå!',
var myPopup = $ionicPopup.show({
templateUrl: 'templates/components/welcomePopup.html',
scope: $scope,
buttons: [{
text: 'Hejdå!',
type: 'custom-save-button',
onTap: function (e) {
$scope.showSpinner = true
}
}]
})
我是如何拖延的:
$timeout(function (){
// Popup here
}, 3000)
但当添加延迟时,我的按钮不会显示,如果没有延迟,任何东西都不会工作
buttons: [{
text: 'Hejdå!',
type: 'custom-save-button',
有人知道快速解决方法吗
这是目前的代码:
$timeout(function() {
var myPopup = $ionicPopup.show({
templateUrl: 'templates/components/welcomePopup.html',
scope: $scope,
buttons: [{
text: 'Hejdå!',
type: 'custom-save-button',
onTap: function (e) {
$scope.showSpinner = true
}
}]
})
}, 3000)
谢谢阅读!:) 我设法解决了一半的问题。我怀疑问题与
$scope
有关,显然我是正确的
因此,我添加了另一个$scope
:
var myPopup = $ionicPopup.show({
templateUrl: 'templates/components/welcomePopup.html',
scope: $scope.$scope, // added $scope
buttons: [{
text: 'Hejdå!',
type: 'custom-save-button',
onTap: function (e) {
$scope.showSpinner = true
}
}]
})
但是,这些按钮还不能工作 您的按钮不起作用,因为当您在超时上下文中对
$scope
执行某些操作时,您不再处于控制器上下文中
当您点击按钮时,变量showSpinner
实际上应该设置为true
,问题在于Angular不知道该值已更改,因此不会刷新视图
要解决此问题,您可以在更改范围中的值后通过添加该代码段强制刷新:
if ($scope.$root.$$phase !== '$apply' && $scope.$root.$$phase !== '$digest') {
$scope.$apply();
}
条件是在已有刷新请求正在进行时阻止刷新请求。
因此,我认为您不需要在主$scope中传递$scope
希望这有帮助