javascript - 如何在 AngularJS 中实现 Controller 特征

标签 javascript angularjs

我想授予一组 Controller 访问特征中定义的方法和属性的权限。现在我想出的最好的实现是:

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

app.controller('MainCtrl', function($scope, CtrlTrait) {
  $scope.name = CtrlTrait.presetName;
  CtrlTrait.setGreeting.call($scope, 'Hello');
});

app.service('CtrlTrait', function() {
  this.setGreeting = function(greeting) { this.greeting = greeting; }
  this.presetName = 'tom';
});

Plunkr Code

这很好,但我希望可以通过 Controller 的 $scope 访问属性和方法,而不必在每个 Controller 中手动创建别名。我希望能够通过将服务注入(inject) Controller 来使用模板中的属性和方法。

这可能吗,还是我必须创建一个 [wrapper around]/[provider for] $scope$specialCtrlScope 来预设我想要的属性和方法?

最佳答案

您可以像这样尝试使用 angular.extend:angular.extend($scope,CtrlTrait); 它允许我们在 $scope 中使用 与您的服务相同的功能。因此,您可以像这样在 html 中直接使用该函数:

 <button ng-click="setGreeting('Good bye! ')">Good Bye</button>

这是您改编的 plunker 演示:

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

app.controller('MainCtrl', function($scope, CtrlTrait) {
  $scope.name = CtrlTrait.presetName;
 // CtrlTrait.setGreeting.call($scope, 'Hello');
  angular.extend($scope,CtrlTrait);
  $scope.setGreeting('Hello World');
});

app.service('CtrlTrait', function() {
  this.setGreeting = function(greeting) { this.greeting = greeting; }
  this.presetName = 'tom';
});

http://plnkr.co/edit/BENS78mjFfpc6VCEtgK8?p=preview

关于javascript - 如何在 AngularJS 中实现 Controller 特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21685295/

相关文章:

javascript - 如何使用 jQuery 将选中的复选框的值添加到文本区域?

javascript - 在 redux 中嵌套/组合组合 reducer ?

angularjs - Typescript AngularJS 范围问题

javascript - Angular JS - 解决自定义函数的依赖关系

javascript - 为什么 componentDidMount 没有被解雇?

javascript - Jquery - 如何在可以拖动和删除的图像上绘制线框(对象)?

javascript - Firebase getIdToken 返回对象

javascript - 重新渲染图形时如何保持当前缩放比例和平移级别

AngularJS:从隔离范围发送事件

javascript - 使用 Angular 从 JSON 生成 HTML 标签