Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从嵌套指令调用控制器$scope方法_Javascript_Mvvm_Angularjs - Fatal编程技术网

Javascript 从嵌套指令调用控制器$scope方法

Javascript 从嵌套指令调用控制器$scope方法,javascript,mvvm,angularjs,Javascript,Mvvm,Angularjs,我有以下指示: 指令1 app.directive('tableDiv', function () { return { templateUrl: 'js/directives/table-div/table-div.html', replace: true, scope: { table: '=', }, controller: function ($scope, $element,

我有以下指示:

指令1

app.directive('tableDiv', function () {
    return {
        templateUrl: 'js/directives/table-div/table-div.html',
        replace: true,
        scope: {
            table: '=',
        },
        controller: function ($scope, $element, $attrs) {

        },
        link: function postLink(scope, element, attrs) {

        }
    }
});
指令1模板:

    <div data-table-div-row value="row" sizes="table.tbody.sizes" ng-repeat="row in table.tbody.values">
</div>
<div>
<div class="row-fluid">
    <div class="table-row clearfix">
        <div class="{{sizes.first}} first">{{value.display.first}}</div>
        <div ng-repeat="cell in value.display.cells" class="{{sizes.cells[$index]}}">{{cell}}</div>
        <div class="{{sizes.last}} last regular">
            <div ng-switch on="value.display.last">
                <div ng-switch-when="%editbutton%">
                    <div class="show-info closed" ng-click="showInfo()"></div>
                </div>
                <div ng-switch-default>
                    {{value.display.last}}
                </div>
            </div>
        </div>
    </div>
</div>
<div ng-if="hasTemplate()">
    <ng-include src="value.template"></ng-include>
</div>
指令2模板:

    <div data-table-div-row value="row" sizes="table.tbody.sizes" ng-repeat="row in table.tbody.values">
</div>
<div>
<div class="row-fluid">
    <div class="table-row clearfix">
        <div class="{{sizes.first}} first">{{value.display.first}}</div>
        <div ng-repeat="cell in value.display.cells" class="{{sizes.cells[$index]}}">{{cell}}</div>
        <div class="{{sizes.last}} last regular">
            <div ng-switch on="value.display.last">
                <div ng-switch-when="%editbutton%">
                    <div class="show-info closed" ng-click="showInfo()"></div>
                </div>
                <div ng-switch-default>
                    {{value.display.last}}
                </div>
            </div>
        </div>
    </div>
</div>
<div ng-if="hasTemplate()">
    <ng-include src="value.template"></ng-include>
</div>

{{value.display.first}
{{cell}}
{{value.display.last}


在第二个指令模板中,我包含了一个基于controller$scope模型的动态模板。在该模板和指令模板中,我想从控制器$scope调用一个函数。有没有办法实现这一点?

创建了一个子作用域,这意味着父函数应该在此模板中可用。换句话说,你不必做任何事情,它就会起作用——看这个简单的例子:

所以,它似乎在文档中,对我来说不够清楚。在我需要添加的指令声明中:
method:“&”

    scope: {
        table: '=',
        method: '&'
    },
在我调用指令的模板中,
方法
html属性的末尾必须有
()

<div data-table-div-row method="method()" value="row" sizes="table.tbody.sizes" ng-repeat="row in table.tbody.values"></div>


通过这种方式,该方法可以传递到第二个指令。

正如@Direvius所建议的,要从指令调用控制器范围内的方法,必须调用传递带有参数的对象的方法,而不是参数本身:

scope.method({message : "text"});
因此,要从嵌套指令调用控制器方法,必须将参数包装在n个对象中:

scope.method({message : {message : "text"}});
不要忘记在嵌套指令模板中将“message”声明为参数,并在html中声明外部指令声明:

<outer-directive outer-method-arg="method(message)"></outer-directive>

此外,在外部模板中:

<inner-directive inner-method-arg="method(message)"></inner-directive>


是的,没错。我的主要问题是将对函数的引用从控制器$scope向下传递到嵌套在第一个指令中的第二个指令。在第二个指令的控制器中,我使用一些随机值作为参数调用函数:
$scope.expandCallback&&$scope.expandCallback(“text”)
但是参数没有传递到控制器作用域方法。
console.log(arguments)
输出一个空数组。请尝试传递
{message:“text”}