在控制器和指令之间传递值

时间:2015-12-01 05:05:27

标签: angularjs angularjs-directive

我有一个控制器,它引用了一个指令。该指令有自己的控制器。我的指令有ng-file-upload(这本身就是另一个指令)。

我在指令中有一些字段需要作为数组传回主控制器。我该怎么做?

干杯!

2 个答案:

答案 0 :(得分:1)

您是否可能在指令中使用隔离范围?您可以使用=将范围值绑定到控制器范围,如下所示:

angular.module('appName').directive('directiveName', function() {

  return {
    restrict:'E',
    scope: { boundScopeValue : '=' },
    link: function(scope) {
      scope.boundScopeValue = 'Beam me up scotty!';
    }
  }

}

有关隔离范围和各种范围方法的更多信息,请查看关于这个伟大的SO问题的答案:What is the difference between '@' and '=' in directive scope in AngularJS?

另一个很好的选择也是在控制器中定义一个函数,然后在你想要传入值并在控制器中执行操作时在你的指令中调用它。

答案 1 :(得分:1)

隔离范围将是在指令内部范围内映射外部范围成员的最佳选择。

但是,第二个选项的示例如下。

<div ng-controller="MyCtrl">
    <div my-directive callback-fn="ctrlFn(arg1)"></div>
</div>


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

app.directive('myDirective', function() {
    return {
        scope: { someCtrlFn: '&callbackFn' },
        link: function(scope, element, attrs) {
            scope.someCtrlFn({arg1: 22});
        },
    }
});

app.controller('MyCtrl', function($scope) {
    $scope.ctrlFn = function(test) {
        console.log(test);
    }
});