Angularjs 从指令访问控制器范围&;功能

Angularjs 从指令访问控制器范围&;功能,angularjs,Angularjs,我创建了一个简单的指令来运行控制器函数 我期望在调用该函数时,它会更改AppCtrl上的数据,但它不会发生 我不明白为什么这是单向绑定,或者如何使它成为双向绑定 <div ng-app="app" ng-controller="AppCtrl as appctrl"> {{appctrl.data}} <div dataupdater="appctrl.updateData">Click here to update the data</div> &l

我创建了一个简单的指令来运行控制器函数

我期望在调用该函数时,它会更改AppCtrl上的数据,但它不会发生

我不明白为什么这是单向绑定,或者如何使它成为双向绑定

<div ng-app="app" ng-controller="AppCtrl as appctrl">
  {{appctrl.data}}
  <div dataupdater="appctrl.updateData">Click here to update the data</div>
</div>

您正在使用函数绑定,因此必须在单击处理程序中提供函数表达式-
dataupdater=“appctrl.updateData()”
作用域。$apply()
@PSL是的,你是对的,它在“要正确处理模型修改,执行必须使用$apply方法进入角度执行上下文。只有在$apply方法内执行的模型修改才会由Angular正确解释。例如,如果指令侦听DOM事件,例如ng,则单击它必须计算$apply方法内的表达式。“您正在使用函数绑定,因此必须提供函数表达式-
dataupdater=“appctrl.updateData()”
scope.$apply()
在单击处理程序内。@PSL是的,您是对的,在“要正确处理模型修改,执行必须使用$apply方法进入角度执行上下文”中有明确说明。只有在$apply方法内执行的模型修改才会由Angular正确解释。例如,如果指令侦听DOM事件,例如ng,则单击它必须计算$apply方法内的表达式。“您正在使用函数绑定,因此必须提供函数表达式-
dataupdater=“appctrl.updateData()”
scope.$apply()
在单击处理程序内。@PSL是的,您是对的,在“要正确处理模型修改,执行必须使用$apply方法进入角度执行上下文”中有明确说明。只有在$apply方法内执行的模型修改才会由Angular正确解释。例如,如果指令侦听DOM事件,例如ng,单击它必须计算$apply方法中的表达式。”
var app = angular.module("app",[]);

app.controller('AppCtrl', function($scope) {
  var self = this;
  self.data = 'initial data';
  self.updateData = function() {
    var olddata = self.data;
    self.data = 'updated data';
    alert('updated data from "' + olddata + '" to "' + self.data + '"');
  };
});

app.directive('dataupdater', function() {
  return {
    restrict: 'A',
    scope: { callback: '&dataupdater' },
    link: function(scope, element, attrs) {
      var handleClick = function(e) {
        e.stopPropagation();
        e.preventDefault();
        scope.callback()();
      };
      element.bind('click', handleClick);
    }
  };
});