Javascript 从嵌套指令调用控制器$scope方法
我有以下指示: 指令1Javascript 从嵌套指令调用控制器$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,
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”}