具有隔离范围的 angularJS 指令,属性绑定(bind)不起作用

标签 angularjs angularjs-directive angularjs-scope

请看这个jsfiddle:http://jsfiddle.net/viro/DK5pC/3/

与我找到的教程和回复相比,我所做的看起来是正确的,所以我确信我忽略了一些微不足道的事情。

我正在尝试对 html 元素执行指令,这将创建一个同级 div 来显示与原始元素关联的消息。

例如,对于这个 html:

<input ng-model="inp" tst-msg="message" />

我将创建为同级元素:

<div class="msg">Msg:<span ng-bind="tstMsg"></span></div>

我希望 div 范围内的 tstMsg 能够绑定(bind)到输入范围内的 message

该指令如下所示:

angular.module('tst', [])
 .directive('tstMsg', function(){
    var template = "<div class='msg' >Msg:<span ng-bind='tstMsg'></span></div>";

    var link = function(scope,element,attrs) {
        element.parent().append(template);
        console.log("link called");
    };

    return {
        restrict: 'A',
        scope: {
          tstMsg: '='
        },
        link: link
    };
});

嗯,这不起作用,我不明白为什么。

最佳答案

您需要$compile要添加到 DOM 的模板。 Angular 还没有机会添加它的处理程序,例如 ng-bind 指令到 dom 的该部分。

因此,不要只添加这样的元素:

element.parent().append(template);

这些步骤将让 Angular 处理您的模板,然后添加它。

newe = angular.element(template);
$compile(newe)(scope);
element.parent().append(newe);

Updated fiddle

关于具有隔离范围的 angularJS 指令,属性绑定(bind)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20548513/

相关文章:

AngularJS。 ui-view 包含在 ng-view 中

javascript - 在 ngRepeat 内部时,如何从 Angular 中的指令向 $scope 添加新属性

javascript - 参数 'myController' 不是函数,未定义

javascript - 从属性指令中观察元素的 ngModel

javascript - 为什么ng-class在 Angular Directive(指令)中被多次调用?

javascript - 从指令内部 $watch 对 ngModel 的外部更改的正确方法

javascript - 使用 AngularJS 的多个 api 调用

javascript - 如何在 AngularJS 应用程序中使用两个 hashPrefix?

javascript - 使用 angularjs animate 动画 div

angularjs - 如何在 ionic 中制作圆形输入字段?