【发布时间】:2017-05-28 04:49:00
【问题描述】:
我目前正在将指令中存在的两种方法重构为服务。
这是方法一:
scope.computeStyle = (component) ->
elementHash = {}
if component.element.type == 'table'
elementHash.height = 600
if component.height?
elementHash.height = component.height * 50
else if component.element.type == 'single_value'
elementHash.height = 200
elementHash.width = 800
return elementHash
这是方法二:
scope.computeStyle = (element, rowComponent) ->
elementHash = {}
if element.type == 'table'
elementHash.height = 600
if rowComponent?.height?
elementHash.height = rowComponent.height
else if element.type == 'single_value'
elementHash.height = 200
elementHash.width = 800
return elementHash
他们都做同样的事情(略有不同)。他们采用element/component(这些对象包含有关我的应用程序中的对象的数据),检查它们是什么类型的对象(在本例中为表格或单个值),并应用高度和/或宽度转换。
在我的服务范围内,这是我所做的:
angular = require "angular"
angular.module("myapp.dashboards.layouts").service("DashboardLayoutComputeStyle" ->
@computeStyle = (componentElement, height) ->
elementHash = {}
if componentElement.type == 'table'
elementHash.height = 600
if height?
elementHash.height = height
else if element.type == 'single_value'
elementHash.height = 200
elementHash.width = 800
return elementHash
@
)
这就是我的问题所在:
我不确定在我的抽象方法中的这一行要做什么:
if height?
elementHash.height = height
在方法一中,它是这样的:
if component.height?
elementHash.height = component.height * 50
方法二是这样的:
if rowComponent?.height?
elementHash.height = rowComponent.height
我对这两行的重构有三个限制:
我必须检查方法二中是否同时存在
rowComponent和height我不需要检查
component是否存在,但我必须在方法一中检查height是否存在在方法一中,我必须将
elementHash,height设置为component.height * 50,而在方法二中,我可以简单地将rowComponent.height分配给elementHash.height
如何将这两行抽象出来?
【问题讨论】:
标签: javascript angularjs angularjs-directive coffeescript angular-services