函数(表达式)绑定不起作用

时间:2017-04-19 13:04:20

标签: javascript angularjs angularjs-directive

我无法弄清楚为什么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>

1 个答案:

答案 0 :(得分:1)

&绑定提供了一个执行表达式的包装函数。所以dir.fn()所做的就是获得test属性。

The documentation说,

  

&安培;或&amp; attr - 提供在父作用域的上下文中执行表达式的方法。如果未指定attr名称,则假定属性名称与本地名称相同。

为了使其按预期工作,它应该是

<my-directive fn="main.test()"></my-directive>