javascript - 从 Bootstrap 模式加载的远程页面调用 AngularJS 函数

标签 javascript angularjs twitter-bootstrap

我使用 Bootstrap 3 模态组件加载远程表单,在其中定义一个 Angular Controller 和几个函数。但浏览器显示“尝试多次加载 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');
        });
    }
}

}])

但现在错误变成:参数'saveFormController'不是一个函数,未定义

最佳答案

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

只需两个 Controller ,但使用相同的 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 应用程序的 Controller

编辑

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

编辑2

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

Plunkr

(来自文档)

关于javascript - 从 Bootstrap 模式加载的远程页面调用 AngularJS 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30839247/

相关文章:

html - 在 Bootstrap 中覆盖响应行默认值

javascript - 什么是纯 reducer ?

javascript - React 中的输入字段没有变化(受控输入)

angularjs - ng-grid 隐藏 bootstrap 样式的下拉菜单

javascript - Bootstrap Tour如何只显示在一页上

javascript - 如何在 Bootstrap 轮播结束时加载 JS 脚本?

javascript - 改变 CoffeeScript 中的公共(public)变量

javascript - jQuery:自动执行插件?

javascript - Angular bootstrap-select 在选择后继续显示选项

javascript - 另一个里面的 ui-view 不显示