gpt4 book ai didi

javascript - AngularJS 将 bool 值传递给指令未定义

转载 作者:太空狗 更新时间:2023-10-29 16:45:34 24 4
gpt4 key购买 nike

我有一个用于添加渐变背景颜色的指令,有点像这样:

.directive('colouredTile', function () {
return {
restrict: 'A',
controller: 'ColouredTileController',
scope: {
colour: '@colouredTile',
colouredIf: '='
},
link: function (scope, element, attr, controller) {

console.log(scope.colouredIf);

// Get the CSS to apply to the element
var css = controller.generateCSS(scope.colour);

// Apply the CSS to the element
element.attr('style', css);
}
};
})

我目前正在尝试向它添加一个 ng-if 类型的函数,因此我添加了一个名为 coloured-if 的属性。我希望它仅在 coloured-if 属性被评估为 true 时应用颜色。我知道我必须加一 block watch ,但我还没到那一步。到目前为止,我的观点是:

<form name="orderHeader" novalidate coloured-tile="D83030" coloured-if="orderHeader.$invalid" ng-class="{ 'test': orderHeader.$invalid }">
<div class="form-group" ng-class="{ 'has-error' : !orderHeader.source.$pristine && orderHeader.source.$invalid || !orderHeader.source }">
<label class="control-label">Source</label>
<select class="form-control" name="source" ng-disabled="controller.order.orderNumber" ng-model="controller.order.source" ng-options="source.id as source.name for source in controller.sources" required></select>
</div>

<div class="form-group" ng-class="{ 'has-error' : !orderHeader.reason.$pristine && orderHeader.reason.$invalid || !orderHeader.reason }">
<label class="control-label">Reason for adding additional order</label>
<select class="form-control" name="reason" ng-disabled="controller.order.orderNumber" ng-model="controller.order.reason" required>
<option>Manual</option>
<option>Sample</option>
</select>
</div>

<div class="form-group" ng-class="{ 'has-error' : !orderHeader.accountNumber.$pristine && orderHeader.accountNumber.$invalid || !orderHeader.accountNumber }">
<label class="control-label">Account number</label>
<input class="form-control" type="text" name="accountNumber" ng-disabled="controller.order.orderNumber" ng-model="controller.order.accountNumber" typeahead="account.accountNumber as account for account in controller.autoComplete($viewValue)" typeahead-template-url="template/typeahead/typeahead-account-match.html" autocomplete="off" />
</div>

<div class="form-group" ng-class="{ 'has-error' : !orderHeader.referenceNumber.$pristine && orderHeader.referenceNumber.$invalid || !orderHeader.referenceNumber }">
<label class="control-label">Customer reference number</label>
<input class="form-control" type="text" name="referenceNumber" ng-disabled="controller.order.orderNumber" ng-model="controller.order.referenceNumber" required />
</div>

<div class="form-group">
<button class="btn btn-danger" type="button" ng-click="controller.back()">Cancel</button>
<a class="btn btn-primary pull-right" ng-disabled="orderHeader.$invalid" ui-sref=".lines">Continue</a>
</div>
</form>

如您所见,我在表单本身上有 coloured-tile 并且 coloured-if 属性正在评估表单的 $invalid 状态。如果表格无效,我希望它应用颜色。

目前的问题是,在我控制台注销 scope.colourIf 的指令中,它返回“未定义”,这很奇怪。作为测试,我向表单添加了一个 ng-class 指令,以查看该表单是否可以访问 $invalid 属性,我可以确认它可以访问。

那么,有人知道为什么我的指令中出现“undefined”而不是“true”吗?

最佳答案

link 函数在解析 DOM 时执行,但是您的指令 colouredIf 的值可能会在您的应用程序使用期间发生变化。因此,您需要$watch 来了解此变量的变化:

scope.$watch('colouredIf',function(newVal,oldVal){
console.log(newVal);
});

关于javascript - AngularJS 将 bool 值传递给指令未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32825718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com