【问题标题】:Calling AngularJS function from a remote page loaded by Bootstrap modal从引导模式加载的远程页面调用 AngularJS 函数
【发布时间】:2015-06-15 07:11:38
【问题描述】:

我使用 Bootstrap 3 模态组件来加载一个远程表单,我在其中定义了一个 Angular 控制器和几个函数。但是浏览器说“尝试多次加载 Angular”。

主页:

(omitted: ng-app="manageAppCollections", ng-controller="manageAppController")

<button type="button" class="btn btn-success" ng-href="./appConfForm" data-toggle="modal" data-target="#saveModal">Add an App</button>

<div id="saveModal" class="modal inmodal fade" aria-hidden="true" role="dialog" tabindex="-1" refresh-modal>
    <div class="modal-dialog">
        <div class="modal-content">
        </div>
    </div>
</div>

表单页面(./appConfForm):

<div ng-app="saveForm" ng-controller="saveFormController">
    <div class="modal-header">
        <button class="close" data-dismiss="modal" type="button">
            <span aria-hidden="true">×</span>
            <span class="sr-only">Close</span>
        </button>
    </div>
    <div class="modal-body">
        <form class="form-horizontal" name="eventEditForm">
            (omitted form content)
        </form>
    </div>
    <div class="modal-footer">
        <button class="btn btn-default" data-dismiss="modal" type="button">Cancel</button>
        <button class="btn btn-primary" type="button" ng-click='addApp()'>Submit</button>
    </div>
</div>
<script>
    angular.module('saveForm',[]).controller('saveFormController', ['$scope, $http', function($scope, $http) {
        $scope.addApp = function(){
            console.log("Added!");
        }
    }])
</script>

addType()函数无法触发。

我需要编译远程内容吗?我该怎么做?

编辑

之前我在两个页面中都加载了 AngularJS 文件,这不是必需的。现在我删除了表单页面中的那些文件,但是页面中的内容不起作用。我认为它需要在加载后编译,所以现在:

主页:

(omitted: ng-app="manageAppCollections", ng-controller="manageAppController")

<button type="button" class="btn btn-success" ng-href="./appConfForm" data-toggle="modal" data-target="#saveModal">Add an App</button>

<div id="saveModal" class="modal inmodal fade" aria-hidden="true" role="dialog" tabindex="-1" refresh-modal>
    <div class="modal-dialog">
        <div class="modal-content">
        </div>
    </div>
</div>

<script>
angular.module('manageAppCollections').directive("refreshModal", ['$compile', function($compile) {
return {
    restrict: 'A',
    link: function(scope, element, attrs) {
        element.on('loaded.bs.modal', function(e) {
            $compile(element.contents())(scope);
        }).on('hidden.bs.modal', function (e) {
            element.removeData('bs.modal');
        });
    }
}

}])

但现在错误变成:Argument 'saveFormController' is not a function, got undefined

【问题讨论】:

    标签: javascript angularjs twitter-bootstrap


    【解决方案1】:

    您不需要创建两个“ng-app”。

    只有两个控制器但使用同一个 ng-app,你就可以完成这项工作。

    你能试试这样吗:(编辑:下面的代码不起作用)

    <div ng-controller="saveFormController">
        <div class="modal-header">
            <button class="close" data-dismiss="modal" type="button">
                <span aria-hidden="true">×</span>
                <span class="sr-only">Close</span>
            </button>
        </div>
        <div class="modal-body">
            <form class="form-horizontal" name="eventEditForm">
                (omitted form content)
            </form>
        </div>
        <div class="modal-footer">
            <button class="btn btn-default" data-dismiss="modal" type="button">Cancel</button>
            <button class="btn btn-primary" type="button" ng-click='addApp()'>Submit</button>
        </div>
    </div>
    
    angular.module('manageAppCollections').controller('saveFormController', ['$scope, $http', function($scope, $http) {
        $scope.addApp = function(){
          console.log("Added!");
        }
    }])
    

    saveFormController 成为 ma​​nageAppCollections 应用的控制器

    编辑

    要使用 AngularJS 和 Bootrap,您还可以使用 angular-ui,它更简单:http://angular-ui.github.io/bootstrap/#/modal

    EDIT2

    我编辑了我之前的代码,你可以在这里查看结果:

    Plunkr

    (来自文档)

    【讨论】:

    • 仍然,WARNING: Tried to load angular more than once.
    • 我需要在该表单页面中加载 angularjs 文件吗?我目前在两个页面中加载 angularjs 文件。但是如果我没有在表单页面中加载这些文件,加载的内容将无法工作。看来我需要先编译一下……
    • 这不是一个真正的“新”页面,这只是从主页加载的模态模板(包含角度库)
    • 我的 plunkr 上也做了一些编辑,你能检查一下并告诉我它是否对你有好处吗? :)
    • 非常感谢它的工作原理,但令人沮丧的是该项目由于某些原因不使用'ui.bootstrap'。我最终将表单页面中的控制器移动到主页,并且它以某种方式工作。再次感谢!
    猜你喜欢
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    相关资源
    最近更新 更多