在指令之外调用$ compile作为指令

时间:2013-10-03 15:43:27

标签: angularjs angularjs-directive

从我见过的所有例子中我都应该这样做:(见编辑,我回答了我自己的问题。)

        .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之后尝试了范围。$ apply()但它只是抛出一个关于已经在摘要中的错误,并且仍然没有显示元素的更改。

编辑:

我回答了自己的问题。对于任何可以解释原因的人,我都会给出正确的答案......

答案是: ssmViewport是一个在某些标记中定义的指令,它是这样注入的:

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

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

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

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

0 个答案:

没有答案