Javascript 在AngularJS中,如何使指令成为对象,以便;传递信息”;对它(调用它的方法)?

Javascript 在AngularJS中,如何使指令成为对象,以便;传递信息”;对它(调用它的方法)?,javascript,angularjs,angular-directive,Javascript,Angularjs,Angular Directive,我非常熟悉CanJS,有点像这样的想法,即您可以在HTML元素上实例化自定义web小部件,现在我们有了一个对象,我们可以向它发送消息(调用其中的方法): 或 用AngularJS怎么能做到?在创建一个指令并将其设置在HTML元素上或将该指令用作HTML元素后,如何执行上面的操作(如在OOP中),或者Smalltalk将如何执行--向特定对象发送消息 我可以想出一个办法,比如: <review-stars api="ctrl.reviewStarAPI"></review-sta

我非常熟悉CanJS,有点像这样的想法,即您可以在HTML元素上实例化自定义web小部件,现在我们有了一个对象,我们可以向它发送消息(调用其中的方法):

用AngularJS怎么能做到?在创建一个指令并将其设置在HTML元素上或将该指令用作HTML元素后,如何执行上面的操作(如在OOP中),或者Smalltalk将如何执行--向特定对象发送消息

我可以想出一个办法,比如:

<review-stars api="ctrl.reviewStarAPI"></review-stars>
然后在控制器中,执行以下操作:

vm.reviewStarAPI.setStars(3.5);
但这有点混乱,而且有些特别。它总是需要一个控制器。。。尽管如此,我认为我们可以使用1个控制器和作为主程序,实例化一组对象,然后以这种方式调用这些对象上的方法


除了上述方法之外,还有什么方法可以实现这一点?

模块化方法是创建一个名为
reviewStars
的指令。指令应该有一个指示星级的参数

例如:

您可以使用以下内容创建:

angular.module('myAngularModule', [])
.directive('reviewStars', function() {
  return {
    restrict: 'E',
    scope: {},
    bindToController: {
      rating: '@'
    },
    link: function(scope, elem, attrs) {
      // instantiate the lightbox code here
    },
    controller: function () {
      var vm = this;
      // controller code goes here (e.g. the onClick event handler)
    },
    controllerAs: 'ctrl',
    templateUrl: 'review-stars.html' // the HTML code goes in this file
  };
});

查看Rangle的ng课程()或Angular文档(docs.angularjs.org)了解更多关于指令的信息。

查看已经回答的类似问题。
scope: { api: "=" }
link: function(scope, elem, attrs) {
    // first define some functions
    scope.setStars = function(n) { ... };

    // and then set it to the api object:
    scope.api.setStars = scope.setStars();
}
vm.reviewStarAPI.setStars(3.5);
angular.module('myAngularModule', [])
.directive('reviewStars', function() {
  return {
    restrict: 'E',
    scope: {},
    bindToController: {
      rating: '@'
    },
    link: function(scope, elem, attrs) {
      // instantiate the lightbox code here
    },
    controller: function () {
      var vm = this;
      // controller code goes here (e.g. the onClick event handler)
    },
    controllerAs: 'ctrl',
    templateUrl: 'review-stars.html' // the HTML code goes in this file
  };
});