javascript - 在脚本中访问 Angular Controller

标签 javascript html angularjs

目前,我有一些这样的代码

<div id="{{id}}" ng-controller="ngController as ngCtrl" class="modal fade" role="dialog">
    <div class="modal-dialog">
        <!-- Modal content-->
        <!-- Removed some non important html -->
        <script src="/static/jstree/dist/jstree.min.js"></script>
        <script type="text/javascript">
            $(document).ready(function() {
                $.getJSON("/book/modules", function(d) {
                    var moduleDiv = $("#module-div")
                    moduleDiv.jstree({
                        core: {
                            data: d
                        }
                    });
                    moduleDiv.on("select_node.jstree", function(e, data) {
                        ngCtrl.selectedModule = data;
                    });
                });
            });
        </script>
    </div>
</div>

此代码包含在 Angular Directive(指令)中。

app.directive("modulesModal", function(){
    return {
        scope: {
            label: "@",
            input: "@",
            ngController: "=",
            id: "@"
        },
        templateUrl: "/static/book_config/html/modules-modal.html",
        link: function($scope, $elem, $attrs){
            // Non important stuff
        }
    };
});

所以我真正想做的是在这里访问一些 Controller 变量

moduleDiv.on("select_node.jstree", function(e, data) {
    ngCtrl.selectedModule = data;
});

这样我就可以通过指令标签将 Controller 插入其中: 例如

<modules-modal id="myModal" ng-controller="newBookCtrl"></modules-modal>

正确的方法是什么?

最佳答案

结合 jquery 和 Angular 的方式是创建一个 Angular 指令,您就是这样做的。但是,您应该将 jquery 代码移至指令内部,而不是在外部进行操作并将数据传递给指令。在这种情况下,您可以创建一个指令 Controller ,然后将 json 数据加载到 Controller 本身中。它应该是这样的(未经测试的代码):

app.directive("modulesModal", function(){
    return {
        scope: {
            label: "@",
            input: "@",
            //ngController: "=", <- you don't need to pass in a controller
            id: "@"
        },
        templateUrl: "/static/book_config/html/modules-modal.html",
        link: function($scope, $elem, $attrs){
            // Non important stuff
        },
        controller: function ($scope) {
                $.getJSON("/book/modules", function(d) {
                var moduleDiv = $("#module-div")
                moduleDiv.jstree({
                    core: {
                        data: d
                    }
                });
                moduleDiv.on("select_node.jstree", function(e, data) {
                    $scope.selectedModule = data;
                });
            });
        }
    };
});

关于javascript - 在脚本中访问 Angular Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36184345/

相关文章:

javascript - 无法访问指令 Controller 中的 $scope 值

javascript - 在 Mozilla Persona 中登录后如何更新 loggedInUser

javascript - 表单 POST 后重定向

javascript - $watch 第二次值改变时没有触发

java - 适用于网络的高性能pdf查看器

javascript - 在 JQuery 中显示/隐藏打印按钮?

html - 为什么父容器的填充未应用于 float 无序列表?

javascript - 修复不能在 html 中使用 bootstrap 4

javascript - AngularJS中如何让其他 Controller 等待一个 Controller 执行完毕

html - 文本在 Safari 中的位置与在其他浏览器中的位置不同