Javascript 向指令传递布尔值的AngularJS未定义

Javascript 向指令传递布尔值的AngularJS未定义,javascript,html,angularjs,angularjs-directive,directive,Javascript,Html,Angularjs,Angularjs Directive,Directive,我有一个指令,用于添加渐变背景色,有点像这样: .directive('colouredTile', function () { return { restrict: 'A', controller: 'ColouredTileController', scope: { colour: '@colouredTile', colouredIf: '=' }, li

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

.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类型函数,因此我添加了一个名为有色if的属性。如果属性评估为真,我希望它仅在有色时应用颜色。 我知道我得加一块手表,但我还没到那一步。 到目前为止,我认为:

<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>

来源
增加额外订单的原因
手册
样品
帐号
客户参考号
取消
继续
正如您所看到的,我在表单本身上有彩色磁贴,而彩色if属性正在评估表单的$invalid状态。 如果表格无效,我想让它涂上颜色

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


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

解析DOM时会执行
链接
函数,但是在应用程序使用过程中,指令的值可能会发生更改。因此,您需要
$watch
查看此变量的更改:

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

需要观看
coloredIf
。。。你只评估过一次。不知道为什么不直接使用
ng style
进行此操作,实际上是在重新创建一个指令,该指令是在链接函数运行forms$invalid属性时内置的,但尚未设置该属性