首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在angularjs中正确使用局部视图和模式

如何在angularjs中正确使用局部视图和模式
EN

Stack Overflow用户
提问于 2016-04-11 19:06:24
回答 2查看 763关注 0票数 0

我刚接触angularjs,所以可能我没有正确地使用一些东西,请指导我正确的方法。

所以这是我的场景:

我有两个对象Books和author,我为这两个对象编写了单独的控制器,具有CRUD操作和每个操作的不同视图,它们都工作得很好。

在作者的“add”视图中,有一个Books的选择框,这样用户就可以选择一本书并添加新的作者,并将该作者与所选的书相关联。

现在的问题是,我需要在作者的“添加”视图中添加“添加新书”按钮,这将在模式中打开图书的“添加”视图,以便用户可以添加新书,这将自动添加到作者的“添加”表单的选择框中并得到选择。

因为我已经为Book的CRUD创建了控制器、操作和视图,所以我想重用Book的“添加”操作和视图。

在互联网上搜索时,我遇到了“Angularjs ui bootstrap”,我决定使用它,为了实现它,我为Book的Add view创建了局部视图。

下面是我的实现:

Controllers.js:

代码语言:javascript
复制
myapp.controller('AuthorController', ['$scope',. . .,'$uibModal',
 function ($scope,. . ,$uibModal) {
$scope.open = function (size) {

        var modalInstance = $uibModal.open({
          animation: $scope.animationsEnabled,
          templateUrl: 'myModalContent.html',
          controller:’BookController’,
          size: size,

        });
    }
});

BookController:

代码语言:javascript
复制
$scope.AddNew=function(){
        if($scope.book.id>0){
            Book.update({id:$scope.book.id},$scope.book,function(data){
                $location.path('/books');
        });
        }
        else{
            Book.save($scope.book,function(data){
                $location.path('/books');
            });
        }
    };

作者添加视图:

代码语言:javascript
复制
<button class="btn btn-info create" ng-click="open()">
    <i class="fa fa-plus"></i> Add a new Book</button>
<script type="text/ng-template" id="myModalContent.html">
    <div class="modal-header">
        <h3 class="modal-title">I'm a modal!</h3>
    </div>
    <div class="modal-body">
        <div ng-include src="'./resources/views/Book/_details.html'">
        </div>
    </div>
    <div class="modal-footer">
        <button class="btn btn-primary" type="button" ng-click="AddNew()">OK</button>
        <button class="btn btn-warning" type="button" ng-click="cancel()">Cancel</button>
    </div>
</script>

这段代码通过调用图书的“AddNew”函数来添加新书,该函数添加新书并重定向到图书列表,但在从作者的控制器调用时,我需要它只添加新书,并让AuthorController知道新书已添加,并返回新书的id。

如何让AuthorController了解新书?

请给我引路。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2016-04-11 19:31:48

您的BookController需要通过关闭$uibModalInstance返回到AuthorController,如下所示:

代码语言:javascript
复制
$scope.AddNew=function(){
    var isNew;
    if($scope.book.id>0){
        Book.update({id:$scope.book.id},$scope.book,function(data){
            isNew = false;
    });
    }
    else{
        Book.save($scope.book,function(data){
            isNew = true;
        });
    $uibModalInstance.close({bookId: $scope.book.id, isNew: isNew}); 
    }
};

然后,您的AuthorController将像这样处理返回:

代码语言:javascript
复制
modalInstance.result.then(function(result) { 
    if(result.isNew){
                // stay here
            }else{
                // redirect to book                    
            }
}); 
票数 0
EN

Stack Overflow用户

发布于 2016-04-11 19:35:02

您可以广播事件(或使用自定义工厂生成图书)

在BookController中:

代码语言:javascript
复制
$rootScope.$broadcast("newBook", book.id);

在AuthorController中:

代码语言:javascript
复制
$rootScope.$on("newBook", function(event, bookId){
    //do something
});

别忘了:包含$rootScope

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36546944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档