6

基本上,我如何才能从指令中听到表达式的变化?


我正在使用无证ng-required有条件地要求某个字段:

<input type="checkbox" ng-model="partner" checked />
<input ng-model="partnerName" placeholder="required" ng-required="partner" />

这很好用(这里是 Plunkr)。唯一的问题是它保留了placeholder“必需”文本,而不管它是否实际需要。


所以,我决定创建自己的指令。这是它应该如何工作的:

<input ng-placeholder="{ 'required': partner }" />

这个想法类似于 angular's ng-class,但我无法做到这一点。这是我到目前为止所得到的:

app.directive('ngPlaceholder', function ($parse) {
    return {
        restrict: 'A',
        link: function (scope, element, attrs) {
            console.log( scope.$eval(attrs.ngPlaceholder) );
        }
    }
});

它记录了一个很好的对象,我可以用它来确定placeholder值:

{ required: true }

但是我如何挂钩$digest/$apply循环以在更改placeholder时更新属性partner

4

2 回答 2

2

这是你想要的吗 ?笨蛋

您的链接功能的基本思想应该是

   link: function (scope, element, attrs) {
        scope.$watch(attrs.xngPlaceholder, function (newVal, oldVal, scope) {
          element.removeAttr('placeholder');
          var att = '';
           angular.forEach(newVal, function (elm, key)
                att += elm ? (key + ' ') : ''; 
            });
            element.attr('placeholder', att);
        }, true);
    }
于 2012-12-26T05:48:07.823 回答
0

另一种不需要指令的方法:

placeholder="{{{true: 'required', false:''}[partner]}}"

上面创建对象{true: 'required', false:''},然后使用 的当前值对对象进行索引partner

于 2012-12-26T18:09:17.320 回答