我有一个在广播事件后显示的指令。在处理事件时,我设置了我需要传递给指令的变量。但在范围内,它总是未定义的。我收录了'个人资料'我也在使用的变量,并且作为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;
}));
答案 0 :(得分:0)
AngularJS
规范化元素的标记和属性名称。 HTML不区分大小写,因此,AngularJS
通过小写形式引用DOM中的指令,通常使用DOM元素上的划线分隔属性(例如ng-model)。
规范化过程如下:
x-
和data-
。 :
,-
或_
- 分隔名称转换为camelCase。因此,话虽如此,vendorId
的HTML属性应该如下所示
vendor-id="oc.selectedVendor"
希望有所帮助