指令中ngChange事件后的控制器功能

时间:2014-10-05 14:36:41

标签: javascript angularjs

我发现了一些问题和示例,但它们都使用了$ scope,到目前为止我还没有在我的应用程序中使用$ scope。我试图在指令中的复选框被选中时执行控制器功能(ng-change)。

JSFiddle

HTML

<div ng-app="myApp" ng-controller="Controller as ctrl">
    <dir-select doIt="ctrl.doIt()" object="ctrl.object"> 
</div>

控制器和指令

var app = angular.module('myApp', []);

app.controller("Controller",[ function() {
    var ctrl = this;
    ctrl.object = {
        name: "test",
        selected: false
    };
    ctrl.doIt = function() {
      alert("Doing It!");
    };
}]);

app.directive('dirSelect', function() {
  return {
    restrict: 'E',
    template: '<input type="checkbox" ng-model="object.selected" ng-change="doIt()">select',
    scope: {
      object: '=',
      doIt: '&'
    }
  }      
});

我错过了什么?

3 个答案:

答案 0 :(得分:2)

请试试这个

<dir-select do-it="ctrl.doIt()" object="ctrl.object"> 

并在指令

template: '<input type="checkbox" ng-model="object" ng-change="doIt()">select',

答案 1 :(得分:1)

Angular规范化属性名称。在HTML代码中,您应该使用以划线分隔的格式而不是驼峰式。只需将doIt="ctrl.doIt()"更改为do-it="ctrl.doIt()"即可。请参阅下面的代码。

<div ng-app="myApp" ng-controller="Controller as ctrl">
    <dir-select do-it="ctrl.doIt()" object="ctrl.object"> 
</div>

答案 2 :(得分:0)

修改了您的HTML:

<div ng-app="myApp" ng-controller="Controller as ctrl">
    <input type="checkbox" ng-change="ctrl.doIt()" ng-model="ctrl.object">        
</div>

检查:http://jsfiddle.net/9nmyom0h/