我无法弄清楚为什么this plnkr无法正常工作。
我试图将一个简单的函数从父控制器绑定到子自定义指令。如果我使用&
,它就不起作用,但如果我使用=
或<
,它就可以正常使用。我知道这是不好的做法,但为什么它有效并且&
没有?也许我错过了一些非常简单的事情?
这是脚本:
JS
var app = angular.module('myApp',['ngMaterial']);
app.controller('mainCtrl',mainCtrl);
function mainCtrl(){
var main = this;
main.test = function(){console.log("test")};
}
app.directive('myDirective',myDirective);
function myDirective(){
return {
scope: {},
controller: myCtrl,
controllerAs: "dir",
bindToController: {
//fn: '&' //This doesn't work
fn: '<' // This works
},
template: '<md-button ng-click="dir.fn()" class="md-raised">click</md-button>'
};
function myCtrl(){
}
}
HTML
<div ng-app="myApp" ng-controller="mainCtrl as main">
<my-directive fn="main.test"></my-directive>
</div>
答案 0 :(得分:1)
&
绑定提供了一个执行表达式的包装函数。所以dir.fn()
所做的就是获得test
属性。
&安培;或&amp; attr - 提供在父作用域的上下文中执行表达式的方法。如果未指定attr名称,则假定属性名称与本地名称相同。
为了使其按预期工作,它应该是
<my-directive fn="main.test()"></my-directive>