javascript - Angular js 嵌套自定义指令

标签 javascript angularjs nested

我想在 Angular js 中使用类似于自定义指令的嵌套。谁能用简单的解决方案向我解释一下?

下面的示例代码对我不起作用:

<outer>
    <inner></inner>
</outer>

JS

var app = angular.module('app',[]);
app.directive('outer',function(){
    return{
        restrict:'E',
        template:'<div><h1>i am a outer</h1></div>',
        compile : function(elem,attr){
            return function(scope,elem,att,outercontrol){
                outercontrol.addItem(1);
            }
        },
        controller : function($scope){
            this.addItem = function(val){
                console.log(val);
            }
        }
    }
});

app.directive('inner',function(){
    return{
        require : 'outer',
        template : '<div><h1>i am a inner</h1></div>',
        link:function(scope,elem,attr){

        }
    }
});

最佳答案

首先添加restrict:'E'到内部 Controller 以使其可作为元素访问。

然后更改require : 'outer'进入require : '^outer',以便在 parent 中查找此指令。

然后需要使用transclude来启用<outer>的内容通过以下步骤查看:

  1. 添加transclude = true到外部指令。
  2. 定义您想要查看内部数据的位置。 (我猜你需要它出现在“i am external”字符串之后,这样你就可以将外部字符串的模板修改为像这样 template:'<div><h1>i am a outer</h1><div ng-transclude></div></div>' )

那么你就根本不需要编译参数了。 由于这个名为outercontrol的变量不会在outer指令中调用,而是在inner指令中调用,所以outer指令根本不需要编译,inner链接函数将被修改为这样:

link: function(scope, elem, attr, outercontrol){
    outercontrol.addItem(1);
}

完成所有修改后,最终代码将如下所示:

HTML:

<outer>
<inner></inner>
</outer>

js:

var app = angular.module("exampleApp",[]);
    app.directive('outer', function(){
        return{
            transclude:true,
            restrict:'E',
            template:'<div><h1>i am a outer</h1><div ng-transclude></div></div>',
            controller : function($scope){
                this.addItem = function(val){
                    console.log(val);
                }
            }
        }
    });

    app.directive('inner',function(){
        return{
            restrict:'E',
            require : '^outer',
            template : '<div><h1>i am a inner</h1></div>',
            link:function(scope,elem,attr,outercontrol){
                outercontrol.addItem(1);
            }
        }
    });

关于javascript - Angular js 嵌套自定义指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27675321/

相关文章:

asp.net-mvc - AngularJS - 用户界面路由器 - MVC 5 - html5mode

angularjs - 双击导航栏的下拉菜单。

javascript - Chrome - 中断属性修改

javascript - 如何在 Azure 的文本翻译 API 中正确使用 access_token 参数?

javascript - 是否重新编译了 javascript 中的闭包

javascript - 如果没有结果则反抗

后端更改时angularjs自动重新加载

java - 如何从 .java 文件(Java)外部实例化嵌套在类中的类?

javascript - 访问JS对象中的动态嵌套键

elasticsearch - 在elasticsearch中搜索嵌套面的值