Javascript 按钮不在$timout/setTimeout内工作|角度和离子

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å!',

我想显示一个弹出窗口,但有点延迟。问题是,当我不延迟弹出时,按钮不工作,当我添加延迟时,按钮不显示!我在网上读到,$timeout是一个异步函数,但这不是问题所在,是吗

弹出窗口:

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

希望这有帮助