0

我正在尝试将参数传递给指令链接函数内部的函数,类似于以下问题: Angular: Calling controller function inside adirective link function using &

但是,虽然我已经看到了一些示例,例如:Passing Parameters from a Directive to a function,但我已经看到在指令内的链接中设置了参数值。但是,我还没有看到您在哪里传递原语,例如将数字作为参数传递给将其传递给控制器​​函数的指令。

我尝试了多种方法,但还没有弄清楚语法。

HTML 代码:

<!DOCTYPE html>
<html>

  <head>
    <script data-require="angular.js@1.4.2" data-semver="1.4.2" src="https://code.angularjs.org/1.4.2/angular.js"></script>
    <link rel="stylesheet" href="style.css" />
    <script src="script.js"></script>
  </head>

  <body>
    <div id="app" ng-app="app">
    <div ng-controller="mainCtrl">
          <my-directive ctrl-fn="ctrlFn(count)"></my-directive> 
        </div>
      </div>
  </body>

</html>

脚本.JS

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

app.controller("mainCtrl", function($scope) {
  $scope.count = 0;
  $scope.ctrlFn = function() {
      $scope.count = 0;
      console.log('In mainCtrl ctrlFn!');
      $scope.count += count;
     // console.log("count is: " + JSON.stringify($scope.count));
    //Call service here
  };  
})


.directive('myDirective', function() {
  return {
    restrict: 'E',
    scope: {
      'count' : '&',
      'ctrlFn' : '&'
    },
    template: "<div><button ng-click='ctrlFn({count: 10})'>Click Here</button></div>",
    link: function(scope, element, attributes) {
      var count = null;
      scope.ctrlFn = scope.ctrlFn({count: count});
      //scope.text = scope.fn({ count: 0 });
    }
  };
});

我的 plunker 在这里:http ://plnkr.co/edit/6uDntNeqe0g343PmeCED?p=preview

在这个用例中,原语可以作为参数传入吗?如果是这样,我在这里错过了什么?

后果:

如果有人正在寻找这种语法:ctrlFn({count: 10})在 angularjs 文档中,它在自定义指令下被提及:

通常希望通过表达式将数据从隔离范围传递到父范围,这可以通过将局部变量名称和值的映射传递到表达式包装函数来完成。例如,当对话框被隐藏时,hideDialog 函数会显示一条消息。这是通过调用 close({message: 'closure for now'}) 在指令中指定的。然后局部变量 message 将在 on-close 表达式中可用。

4

1 回答 1

2

你犯了两个错误:

  • scope.ctrlFn = scope.ctrlFn({count: count});- 此行覆盖传递的对函数的引用并将其设置为此函数返回的值(undefined在这种情况下)

  • 要将count值传递给您的指令,您应该使用=而不是&

下面是简化示例的代码。

脚本.js:

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

app.controller("mainCtrl", function($scope) {
  $scope.count = 0;
  $scope.ctrlFn = function(count) {
      console.log(count)
      console.log('In mainCtrl ctrlFn!', count);
      $scope.count += count;
    //Call service here
  };  
})


.directive('myDirective', function() {
  return {
    restrict: 'E',
    scope: {
      'count' : '=',
      'ctrlFn' : '&'
    },
    template: "<div><button ng-click='ctrlFn({ count: 100 })'>Click Here</button></div>"
  };
})

索引.html:

<!DOCTYPE html>
<html>

  <head>
    <script data-require="angular.js@1.4.2" data-semver="1.4.2" src="https://code.angularjs.org/1.4.2/angular.js"></script>
    <link rel="stylesheet" href="style.css" />
    <script src="script.js"></script>
  </head>

  <body>
    <div id="app" ng-app="app">
    <div ng-controller="mainCtrl"> {{count}}
          <my-directive ctrl-fn="ctrlFn(count)"></my-directive> 
        </div>
      </div>
  </body>

</html>
于 2017-02-10T19:56:13.973 回答