角度UI模态打开的承诺在模态显示之前解决

Sha*_*hay 5 jquery jquery-ui angularjs angular-ui-bootstrap

我试图在打开的模式上执行jQuery脚本,以便将其中一个字段转换为a jQuery UI Spinner.

我正在使用Angular UI中opened记录的承诺.

问题: jQuery选择器无法按预期工作,也无法检索任何内容.

所以我的控制器的一个功能看起来像这样:

var modalInstance = $modal.open({
    templateUrl: 'modalDialog.html',
    controller: modalCtrl,
    resolve: {
        noOfItems: function(){
            return $scope.noOfItems;
        }
    }
});

modalInstance.opened
    .then(function () {
        $(".spinner").spinner({
            max: 20,
            min: 1
        });
    });

modalInstance.result
    .then(function () {
        console.log("modal closed");
    });
Run Code Online (Sandbox Code Playgroud)

我的HTML:

<script type="text/ng-template" id="modalDialog.html">
    <div class="modal-header">
        <h4 class="modal-title">My Modal</h4>
    </div>
    <div class="modal-body">
        <input class="form-control spinner" type="text" ng-model="noOfItems" />
    </div>
    <div class="modal-footer">
        <button class="btn btn-default" ng-click="cancel()">Cancel</button>
        <button class="btn btn-primary" ng-click="save()">Save</button>
    </div>
</script>
Run Code Online (Sandbox Code Playgroud)

modalCtrl是无关紧要的.

提示:debuggeropened调用promise 时 我尝试放右,并发现模态尚未打开.

仅供参考,我使用的是jQuery 1.9.0,jQuery UI 1.10.4,AngularJS 1.2.16和Angular UI Bootstrap v0.11.

pko*_*rce 10

您正在从错误的角度处理问题,尝试从控制器执行低级DOM操作.这在AngularJS世界中是一个很大的禁忌,你将会遇到各种各样的麻烦.

您的UI逻辑不应该"等待"将给定的DOM节点添加到DOM树中,而应该以声明方式表达.在这种特殊情况下,它意味着您应该编写一个"滑块"指令,简单如下:

yourModule.directive('mySpinner', function() {
  return {
    link: function(scope, elm) {
      elm.spinner({
        max: 20,
        min: 1
      });
    }
  };
});
Run Code Online (Sandbox Code Playgroud)

然后 modal的HTML中使用这个新定义的指令:

<input class="form-control spinner" type="text" my-spinner ng-model="noOfItems"/>
Run Code Online (Sandbox Code Playgroud)

这样,您就不必担心,当模式的内容被添加到DOM 你做你帮个忙具有限定纺纱的可重复使用的方式!

回到$ modal相关的问题 - opened当所有数据都准备就绪并且即将显示模态(动画开始等)以便能够显示等待指示符或类似时,许诺就会得到解决.绝不是它被设计为知道何时将模态的内容插入到DOM树中,就像AngularJS一样,大多数时候并不需要这种知识.