Typescirpt

时间:2015-08-03 10:49:23

标签: angularjs angularjs-directive angularjs-scope typescript

我的视图中有几个按钮,每个按钮都有三种状态:活动,非活动,悬停。这些显示为图像。 我有FooController:

foo.controller("FooController", function($scope: IFooScope) {
    // Tell the view about the classes in the app
    this.UnitType = UnitType;
    this.ImageType = ImageType;
    $scope.design = new FooDesign();
}); 

接口(FooDesign只是一个具有unitType属性的类):

interface IFooScope extends ng.IScope { 
    design: FooDesign;

    setUnitType(unitType: UnitType);
    getUnitTypeImageUrl(unitType: UnitType);   
} 

我希望有一个像这样的html模板的指令:

<div class="unit-type-button">
    <unit-type-image unit-type="UnitType.Millimeters">
    </unit-type-image>
</div>

<div class="unit-type-button">
    <unit-type-image unit-type="UnitType.Inches">
    </unit-type-image>
</div>

在scope.design中有一个unitType属性,单击这些按钮时必须更改。因此,如果scope.design.unitType =毫米,则该按钮具有活动图像(例如,unit_type_millimeters_active.png),而其他按钮具有非活动图像(例如,unit_type_inches_inactive.png),并且两者都具有悬停图像(例如,unit_type_millimeters_hover.png) 。

我的指示是这样的:

class UnitTypeImage implements ng.IDirective {
    constructor(private imageService: ImageService) { }

    restrict = "E";
    replace = true;
    template = '<img ng-click=setUnitType(unitType) src="{{getUnitTypeImageUrl(unitType)}}"/>';
    /*scope = {
        unitType: '=';
    };*/

    link = (scope: IFooScope, element, attrs) => {
        scope.setUnitType = function (unitType: UnitType) {
            scope.design.unitType = unitType;
        }

        scope.getUnitTypeImageUrl = function (unitType: UnitType) {
            return (unitType === scope.design.unitType) ? imageService.getUnitTypeImage(unitType, ImageType.Active) : imageService.getUnitTypeImage(unitType, ImageType.Inactive);
        }
    }

    static factory(): ng.IDirectiveFactory {
        var directive = (imageService: ImageService) => new UnitTypeImage(imageService);
        directive.$inject = ['imageService'];
        return directive;
    }
}
foo.directive('unitTypeImage', UnitTypeImage.factory());

如果我在指令中取消注释范围,那么scope.design是未定义的。如果我留下它注释,那么每个函数参数的unitType是未定义的。

另外,我还没有在这里包含悬停图像功能,我不确定如何做到这一点。一个选项是这样的:http://jsfiddle.net/ook3a8Lz/但我在视图中有大约100个不同的按钮(同时不可见,取决于先前的选择)所以这将是一个烂摊子我想在获取时使用枚举器正确的形象。

我有点坚持这一点,所以欢迎每一条帮助。

1 个答案:

答案 0 :(得分:0)

我放弃了IFooScope并使其成为一项服务,因此没有范围混淆。 此外,由于该指令在其范围内具有unitType(带有=),因此函数参数中不需要unitType,因为现在可以通过scope.unitType访问它们(当IFooScope不再存在时)。