【问题标题】:Angular.js Directive controller inheritanceAngular.js 指令控制器继承
【发布时间】:2015-07-07 12:25:21
【问题描述】:

假设我有一个指令:

.directive('money', ['Service', function (Service) {
/*
* Some code
*/
controller: ['$scope', '$element', '$attrs', '$parse', function (scope, cElement, attrs, $parse) {
    scope.someValue=1;
    scope.someFunction = function(){
        console.writeline('money');
    }
}

还有第二个指令:

 .directive('cash', ['Service', function (Service) {
    /*
    * Some code
    */
    controller: ['$scope', '$element', '$attrs', '$parse', function (scope, cElement, attrs, $parse) {
        scope.someValue=1;
        scope.someFunction = function(){
            console.writeline('cash');
        }
    }

正如您所见,这两个指令之间的唯一区别是一个函数的内容。 如此完美的方式就是继承someFunction的所有控制器和影子

是否有可能在角度上做出这样的事情,或者我应该留下两个差异如此之小的指令?

【问题讨论】:

  • 难道不能只使用一个指令并将不同的值绑定到隔离的范围内吗?
  • 不幸的是,要求我应该有两个指令

标签: javascript angularjs


【解决方案1】:

为什么不直接使用console 指令从指令元素的属性中获取要写入的内容?

因此,您应该使用 <div data-console text="money"></div> 和 <div data-console text="cash"></div>,而不是 <div data-money></div> 和 <div data-cash></div>。

基本上,将不同之处提取到可以带入更通用指令的属性中。


基于cmets,这个怎么样?将控制器创建为独立函数,然后在两个指令中使用相同的控制器。

不过,在这一点上,我不确定它是否会为您节省很多(或任何)代码,并且对于这种重构来说可能是矫枉过正。考虑到细微的差异,保持原样可能更有意义。

【讨论】:

  • 不幸的是,需要两个指令。
  • 这是一个非常具体和奇怪的要求。这是某种家庭作业吗?
  • 不,我已经放学了 :) 目前这是一个指令,取决于参数,但由于容易出错而被拒绝。
  • 有趣。我认为它容易出现的错误是人为的(不更新属性?)。我想如果你必须在这些要求范围内工作,你的双手就会有些束缚。
【解决方案2】:

是的,有继承的选项,之前在这里讨论过: AngularJS controller inheritance

编辑: 此外,您可以通过注入的服务获取通用功能并共享它,变体可以作为参数传递。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 2016-09-07
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    相关资源
    最近更新 更多