指令不承认传入变量

时间:2018-06-14 16:45:31

标签: angularjs typescript angularjs-directive angularjs-scope

我有一个在广播事件后显示的指令。在处理事件时,我设置了我需要传递给指令的变量。但在范围内,它总是未定义的。我收录了'个人资料'我也在使用的变量,并且作为Calling控制器的一部分正确设置。当指令被渲染时,它会填充配置文件但不包含供应商,即使" on"事件已运行并使用有效的Id将步骤编号设置为3。如此困惑

我的HTML代码

<div ng-if="oc.stepNumber == 3">
    <store-Menu profile="oc.selectedProfile" vendorId="oc.selectedVendor" />
</div>

我的指示(简化)

export class StoreMenuDirective implements ng.IDirective {
     templateUrl = 'app/_customer/orderingV2/storeMenu/storeMenu.html';
     scope = {
         profile: '=',
         vendorId: '='
      };
      controller = StoreMenuController;
      controllerAs = 'smc';
  }

各自的控制人员:

    constructor(private $scope: any) {

         alert('VendorId in SMC: ' + $scope.vendorId); --Always undefined
         this.profile = $scope.profile;   --Always Set
    }

呼叫控制器

     $scope.$on('orderMenuSelected', angular.bind(this, (event: any, data: any) => {
        this.selectedVendor = data.vendorId;
        alert('VendorId in OC: ' + data.vendorId);  //is Set here correctly.

        //directive is rendered here, but the vendor id never makes it
        this.stepNumber = 3;
    }));

1 个答案:

答案 0 :(得分:0)

AngularJS 规范化元素的标记和属性名称。 HTML不区分大小写,因此,AngularJS通过小写形式引用DOM中的指令,通常使用DOM元素上的划线分隔属性(例如ng-model)。

规范化过程如下:

  1. 从元素/属性的前面剥离x-data-
  2. :-_ - 分隔名称转换为camelCase。
  3. 因此,话虽如此,vendorId的HTML属性应该如下所示

    vendor-id="oc.selectedVendor"
    

    希望有所帮助