将参数从指令传递到控制器函数
Pass Arguments from directive to controller function
我见过很多这样的问题,但还没有找到有效的解决方案。 这是一个不起作用但应该起作用的小提琴。
http://jsfiddle.net/cdparmeter/j2K7N/2/
控制器:
$scope.foo = function (textArray) {
console.log(textArray)
};
命令:
return {
restrict: 'E',
replace: 'true',
scope: {
methodToCall: '&method'
},
template: "<div>
<input ng-model='textToPush'/>
<button ng-click='pushText'>Push</button>
<button ng-click='finish'>Finish</button>
</div>",
link: function (scope, element, attrs) {
scope.paragraphs = [];
scope.pushText = function () {
scope.paragraphs.push(scope.pushText);
scope.pushText = "";
}
scope.finish = function () {
scope.methodToCall(scope.paragraphs)
}
}
}
.HTML:
<div ng-app="MyApp">
<div ng-controller="MyController">
<container data-method="foo">
</div>
</div>
我正在我的指令中构建一个数组,该数组需要在父范围的控制器中进行自定义处理。我知道我可以在我传递到指令中的模型的父范围内放置手表,但这似乎很笨拙和肮脏。有什么建议吗?
在回答你的问题之前,我必须说你的脚本包含一些错误:
- 您将输入绑定到一个名为
textToPush
的变量,然后在pushText
函数中使用不同的变量 (pushText
); - 您没有正确设置
ng-click
指令;它应该是ng-click="pushText()"
而不是ng-click="pushText"
。finish
也是如此;
现在,回到你的问题。为了调用传递参数的父作用域的函数,您可以先获取对该函数的引用,然后执行它:
scope.finish = function () {
var func = scope.methodToCall();
func(scope.paragraphs);
}
这是脚本的工作版本。
如果您愿意,也可以这样做:
scope.finish = function () {
scope.methodToCall({value: scope.paragraphs});
}
但是要使此代码正常工作,您应该将标记更改为:
<container data-method="foo(value)"/>
这是另一个显示上述解决方案的jsFiddle。
相关文章:
- AngularJS执行指令模板中的控制器函数
- Angularjs:路由后如何调用控制器函数
- 为什么控制器函数没有执行 Angular Js 1.5.5
- 在 html5 视频结束时调用 AngularJS 控制器函数
- Angularjs指令调用控制器函数
- 从浏览器调用角度控制器函数
- 如何在angular js中从指令调用控制器函数
- AngularJS-如何在ng中继器中调用以项值为参数的控制器函数
- Angularjs将函数从控制器传递到指令(或从指令调用控制器函数)-带参数
- 如何使用ajax从javascript调用控制器函数
- 触发视图'的控制器函数
- 从AngularJS中的视图调用控制器函数
- 当使用Angular1+ES6时,控制器函数中未定义依赖注入,控制器是一个类
- 从指令角度调用控制器函数
- 从指令调用控制器函数(使用从指令传递的参数)
- 从 Karma 和 Jasmine 测试调用控制器函数
- 从指令调用角度控制器函数
- 有什么方法可以放置一个触发器来在 CodeIgniter 的控制器函数中切换引导模式
- 如何修复角度 js ng 控制器函数调用
- 我可以将变量控制器函数传递给指令中的函数链接吗?