2

从我看到的所有示例中,这应该可以工作:(请参阅EDIT,我回答了我自己的问题。)

        .directive('ssmViewport', ['$compile', 'ssmLayoutMan', function($compile, layoutManager) {
        return {
            restrict: 'AE',
            replace: false,  // TODO: remove if false is the default.
            link: function (scope, element, attrs) {
                layoutManager.renderView = function (view) {
                        console.log('this text does appear in the log...');
                        element.append('This text should appear...');  // but it doesn't appear
                        // these two commented lines are what I'm really trying to do.
                        //element.append(view.template); 
                        //$compile(element.contents())(scope);
                    }
                };
            }
        };
    }])

在我调用的代码的其他地方:

layoutManager.renderView({template: '<div some-custom-directive></div>'});

但唉......元素似乎没有改变。我在 $compile 之后尝试了 scope.$apply() ,但它只是抛出一个关于已经在摘要中的错误,并且仍然不显示对元素的更改。

编辑:

我回答了我自己的问题。我将为任何可以解释为什么会这样的人标记一个正确的答案...

答案是:ssmViewport 是一个指令,它在一些注入的标记中定义,如下所示:

var html = $compile(templateThatContainsTheSSMViewport)(scope);
element.html(html);

但是,如果我像下面这样注入它,那么它将起作用:

element.html(templateThatContainsTheSSMViewport);
$compile(element.contents())(scope);

我昨天刚开始学习角度,所以我还不明白其中的区别......对这个问题的任何启示都会是一个福音:)

4

0 回答 0