GVKun编程网logo

Angular中的Mock NgbModal(Angular中的spa是哪三个单词缩写)

11

对于想了解Angular中的MockNgbModal的读者,本文将提供新的信息,我们将详细介绍Angular中的spa是哪三个单词缩写,并且为您提供关于angularmodal详解、Angularui

对于想了解Angular中的Mock NgbModal的读者,本文将提供新的信息,我们将详细介绍Angular中的spa是哪三个单词缩写,并且为您提供关于angular modal 详解、Angular uibModal,解析,未知提供程序、angular – ngbModal作为通用的Confrimation Box、angular – ngx-bootstrap modal – 通过bsModalRef.content访问传入modal的数据的有价值信息。

本文目录一览:

Angular中的Mock NgbModal(Angular中的spa是哪三个单词缩写)

Angular中的Mock NgbModal(Angular中的spa是哪三个单词缩写)

我需要模拟NgbModal以角度进行一些单元测试,但我不知道如何做到这一点.这是我的功能:

openModal(deviceid: string,productID: string){
        const modalRef =  this.modalService.open(ProductModal)
        modalRef.componentInstance.content = {
            deviceid: deviceid,productId: productID
        } 
        modalRef.componentInstance.toEmit.subscribe(($e) => {
            if ($e === true) this.reloadList();
        });
    }

我应该做些什么?

解决方法

假设你的modalService是NgbModal,你想要测试的逻辑似乎是在模态内容(ProductModal)内,而不是NgbModal本身.

如您所见,在使用.open()后,您的modalRef.componentInstance将是ProductModal的一个实例;因此,您可以将ProductModal作为任何组件进行测试,例如组件夹具和完全跳过modalService:

(同样,假设ProductModal是具有适当装饰的组件.)

let component: ProductModal;
let fixture: ComponentFixture<ProductModal>;
beforeEach(() => {
    Testbed.configureTestingModule({
        providers: [ NgbModal,NgbActiveModal ],declarations: [ ProductModal ]
    });
    fixture = Testbed.createComponent(ProductModal);
    component = fixture.componentInstance;
    fixture.detectChanges();
});

// Now you have the component in `component`,so you can test
// component.content
// component.toEmit
// …

angular modal 详解

$modal是一个可以迅速创建模态窗口的服务,创建部分页,控制器,并关联他们

$modal仅有一个方法open(options)

  • templateUrl:模态窗口的地址

  • template:用于显示html标签

  • scope:一个作用域为模态的内容使用(事实上,$modal会创建一个当前作用域的子作用域)默认为$rootScope

  • controller:为$modal指定的控制器,初始化$scope,该控制器可用$modalInstance注入

  • resolve:定义一个成员并将他传递给$modal指定的控制器,相当于routes的一个reslove属性,如果需要传递一个objec对象,需要使用angular.copy()

  • backdrop:控制背景,允许的值:true(默认),false(无背景),“static” - 背景是存在的,但点击模态窗口之外时,模态窗口不关闭

  • keyboard:当按下Esc时,模态对话框是否关闭,默认为ture

  • windowClass:指定一个class并被添加到模态窗口中

open方法返回一个模态实例,该实例有如下属性

  • close(result):关闭模态窗口并传递一个结果

  • dismiss(reason):撤销模态方法并传递一个原因

  • result:一个契约,当模态窗口被关闭或撤销时传递

  • opened:一个契约,当模态窗口打开并且加载完内容时传递的变量

另外,$modalInstance扩展了两个方法$close(result)$dismiss(reason),这些方法很容易关闭窗口并且不需要额外的控制器

 

<!DOCTYPE html>  
<html ng-app="ModalDemo">  
<head>  
    <title></title>  
    <link href="lib/bootstrap/css/bootstrap.min.css" rel="stylesheet">  
    <script src="lib/angular/angular.min.js"></script>  
    <script src="lib/bootstrap-gh-pages/ui-bootstrap-tpls-0.7.0.min.js"></script>  
    <script src="lib/angular/i18n/angular-locale_zh-cn.js"></script>  
</head>  
<body>  
<div ng-controller="ModalDemoCtrl">  
    <script type="text/ng-template" id="myModalContent.html">  
        <div >  
            <h3>I''m a modal!</h3>  
        </div>  
        <div >  
            <ul>  
                <li ng-repeat="item in items">  
                    <a ng-click="selected.item = item">{{ item }}</a>  
                </li>  
            </ul>  
            Selected: <b>{{ selected.item }}</b>  
        </div>  
        <div >  
            <button  ng-click="ok()">OK</button>  
            <button  ng-click="cancel()">Cancel</button>  
        </div>  
    </script>  
    <button  ng-click="open()">Open me!</button>  
</div>  
<script>  
    var ModalDemo = angular.module(''ModalDemo'', [''ui.bootstrap'']);  
    var ModalDemoCtrl = function ($scope, $modal, $log) {  
        $scope.items = [''item1'', ''item2'', ''item3''];  
        $scope.open = function () {  
            var modalInstance = $modal.open({  
                templateUrl: ''myModalContent.html'',  
                controller: ModalInstanceCtrl,  
                resolve: {  
                    items: function () {  
                        return $scope.items;  
                    }  
                }  
            });  
            modalInstance.opened.then(function(){//模态窗口打开之后执行的函数  
                console.log(''modal is opened'');  
            });  
            modalInstance.result.then(function (result) {  
                 console.log(result);  
            }, function (reason) {  
                console.log(reason);//点击空白区域,总会输出backdrop click,点击取消,则会暑促cancel  
                $log.info(''Modal dismissed at: '' + new Date());  
            });  
        };  
    };  
    var ModalInstanceCtrl = function ($scope, $modalInstance, items) {  
        $scope.items = items;  
        $scope.selected = {  
            item: $scope.items[0]  
        };  
        $scope.ok = function () {  
            $modalInstance.close($scope.selected);  
        };  
        $scope.cancel = function () {  
            $modalInstance.dismiss(''cancel'');  
        };  
    };  
</script>  
</body>  
</html>

 

 

原网址:http://www.html5jq.com/fe/angular_node/20150302/46.html

Angular uibModal,解析,未知提供程序

Angular uibModal,解析,未知提供程序

我试图通过服务公开使用Angular的$ uibModal的“通用”模式。这是该服务的定义:

angular.module('app').service('CustomModalService',['$uibModal',function ($uibModal) {

    var openCustomModal = function (size,title,message) {
        var actionToPerformOnConfirm = action;

        var modalInstance = $uibModal.open({
            templateUrl : 'templates/CustomModal.html',size: size,resolve: {
                title: title,message: message
            }
        });
    };

    return {
        openCustomModal: openCustomModal
    };
}]);

上面没有什么太复杂的。但是,它不起作用。如果我resolve从对象中删除该属性,则该服务有效;但是,如果包含该resolve属性,则会收到源自该属性的未知提供程序错误。

resolve属性的文档为:

(类型:对象)-将被解析并作为本地成员传递给控制器​​的成员;它等效于路由器中的resolve属性。

目的是能够为在其DOM中利用这些属性的模态提供模板,例如:

<div ng-controller="CustomModalController">
    <div>
        <h3>{{title}}</h3>
    </div>
    <div>
        {{message}}
    </div>
    <div>
        <buttontype="button" ng-click="confirmAction()"></button>
        <buttontype="button" ng-click="cancelAction()"></button>
    </div>
</div>

我缺少什么导致此错误引发?

angular – ngbModal作为通用的Confrimation Box

angular – ngbModal作为通用的Confrimation Box

我正在尝试使用ngbmodal创建通用确认框,它将在整个应用程序中使用.其中,标题和消息将从调用组件传递给模态.我创建了一个DialogService并添加到entryComponents中.现在我可以显示确认框.但是无法得到结果.下面是显示ConfirmationBox组件的代码.如何从中获取价值

const modalRef = this.modalService.open(ConfirmationBoxComponent,{backdrop:"static"})
    modalRef.componentInstance.name = "Message";
    modalRef.componentInstance.confirmationBoxTitle = "Confirmation?"
    modalRef.componentInstance.confirmationmessage = "Do you want to cancel?"
    modalRef.componentInstance.changeRef.markForCheck();

解决方法

有很多简单的方法可以实现这一点,但我建议一个最简单和最有效的IMO:用户的选择解决模态的结果承诺.这就像在表示模态内容的组件中执行以下操作一样简单(注意activeModal.close(…)):

<button (click)="activeModal.close(true)">Yes</button>
<button (click)="activeModal.close(false)">No</button>

之后,您可以从NgbModalRef的结果承诺中获取用户的答案(通知modalRef.result.then):

open() {
    const modalRef = this.modalService.open(NgbdModalContent);
    modalRef.componentInstance.confirmationBoxTitle = 'Confirmation?';
    modalRef.componentInstance.confirmationMessage = 'Do you want to cancel?';

    modalRef.result.then((userResponse) => {
      console.log(`User's choice: ${userResponse}`)
    });        
  }

您可以在以下plunker中看到所有这些:http://plnkr.co/edit/yYIx1m1e2nfK0nxFwYLJ?p=preview

angular – ngx-bootstrap modal – 通过bsModalRef.content访问传入modal的数据

我正在使用角度4和ngx-bootstrap来打开模态.一切都运行良好,我通过组件实现模态.我也可以通过bsModalRef的content属性将数据传递给模态.像这样:

this.bsModalRef = this.modalService.open(MyComponent);
this.bsModalRef.content.somedata = [...some array of products];

这一切都很好,然后我的模态可以访问名为somedata的属性.太棒了.我遇到的问题是我想对somedata执行一些计算.假设somedata是具有金额的产品列表,我希望模态将金额减少到单个值.我如何知道模态类中何时可以获得该数据?我可以使用setTimeout hack,它可以工作,但让我觉得内心很蠢.有什么样的生命周期钩子像ngOnChanges那样ngx-bootstrap实现了所以我可以知道数据属性何时被设置,进一步,当它改变时?

解决方法

您可以实现setter或方法

public set somedata(val) {
    // here you process data
}

请记住,this.bsModalRef.content包含对话框组件的所有公共成员(在您的情况下为MyComponent).

关于Angular中的Mock NgbModalAngular中的spa是哪三个单词缩写的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于angular modal 详解、Angular uibModal,解析,未知提供程序、angular – ngbModal作为通用的Confrimation Box、angular – ngx-bootstrap modal – 通过bsModalRef.content访问传入modal的数据等相关知识的信息别忘了在本站进行查找喔。

本文标签: