Javascript AngularJS-指令换行而不丢失与控制器的连接

Javascript AngularJS-指令换行而不丢失与控制器的连接,javascript,angularjs,angularjs-directive,controller,directive,Javascript,Angularjs,Angularjs Directive,Controller,Directive,当您使用指令包装数据时,是否有办法不丢失与当前控制器的连接 我的问题是,包装模板中的指令不再与外部控制器连接,因此我无法执行该函数 包装指令: myApp.directive('wrapContent', function() { return { restrict: "E", scope: { model: "=", datas:

当您使用指令包装数据时,是否有办法不丢失与当前控制器的连接

我的问题是,包装模板中的指令不再与外部控制器连接,因此我无法执行该函数

包装指令:

myApp.directive('wrapContent', function() {
    return {
        restrict: "E",
        scope: {
            model:                      "=",
            datas:                      "="
        },
        templateUrl: "./any/template.php",
        link: function(scope, element, attr) {
            // any
        }
    };
});
包装模板中的指令

myApp.directive('doAction', function() {
    return {
        restrict: "A",
        link: function(scope, elem, attrs) {
            $(elem).click(function(e) {
                scope.$apply(attrs.doAction);
            });
        }
    }
});
康罗尔:

lmsApp.controller('OutsideController', function ($scope){
    $sope.sayHello = function() {
        alert("hello");
     };
});
要在其中执行函数的HTML(template.php):

如何执行
sayHello()
函数


谢谢你的帮助!非常感谢您的回答。

您应该使用
sayHallo
函数传递给您的父指令

myApp.directive('wrapContent', function() {
    return {
        restrict: "E",
        scope: {
            model:                      "=",
            datas:                      "=",
            sayHallo: "&"
        },
        templateUrl: "./any/template.php",
        link: function(scope, element, attr) {
            // any
        }
    };
});
HTML

你不需要再通过一次。因此,您的child指令应该如下所示:

<div>
     <do-action></do-action>
</div>

wrapContent指令将在控制器的范围内处理。 DoAction指令将与wrapContent指令的isolateScope一起处理

解决方案1: 使用“&”获取对wrapContent中sayHello函数的引用,并在事件处理程序中执行它

解决方案2:
使用scope.$parent.

而不是在事件处理程序中使用scope。您如何调用
wrapContent
指令?我已经更新了我的问题thans levi!-好主意——这就是我要找的。这就像通过包装传递函数一样。唯一的问题是,我必须对包装内容中的所有函数执行此操作:(使用第二种解决方案,我不必通过包装传递任何函数?
作用域。model
是空对象?:/将其传递给父指令
model:=”
right?在parent指令中,是的。如果我使用$parent,我必须在parent指令中再次定义函数。对吗?@BernhardPointner您不必这样做。但是这个
scope。$parent.sayHello();
不起作用。->未定义的函数它对我起作用..我尝试了angular v1.3.5。您尝试了哪个版本?如果可能,请创建一个plunker?它是一个$parent太低->
作用域。$parent.$parent
。现在它起作用了!
myApp.directive('wrapContent', function() {
    return {
        restrict: "E",
        scope: {
            model:                      "=",
            datas:                      "=",
            sayHallo: "&"
        },
        templateUrl: "./any/template.php",
        link: function(scope, element, attr) {
            // any
        }
    };
});
<div ng-controller="OutsideController">
        <wrap-content model="any" datas="data_any" sayHallo="sayHallo()"></wrap-content>
</div>
myApp.directive('doAction', function() {
    return {
        restrict: "A",
        link: function(scope, elem, attrs) {
             scope.sayHallo();
        }
    }
});
<div>
     <do-action></do-action>
</div>
myApp.directive('doAction', function() {
    return {
        restrict: "A",
        link: function(scope, elem, attrs) {
             scope.model.sayHallo();
        }
    }
});