Angularjs指令+我需要$ compile

时间:2014-01-29 16:08:26

标签: angularjs

我需要在我的landingPage-builder项目中提供一些指示。 (我现在卡住了!)。

主要问题如下: 模板中的每个元素(如h1和段落)都附加了一个指令。我需要得到的指令是:创建一个HTML模板,附加一些其他指令,如ng-click,ng-options等,保持模型的绑定完整(目前远离工作),更新模型时改变。

我不是试图追加或替换指令所在的元素,而是创建一个html模板并将其插入到DOM中(几乎像另一个视图),以便左侧的模型可以从右侧的“设置”框。

可以在此处查看项目:http://193.107.29.196/~stian123/landingPageV3/app/#/pagebuilder/2

Chrome可能需要Allow-Control-Allow-Origin:https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi/related

我对$ compile有点困惑,并且我不知道何时需要使用这部分指令api。

有什么建议吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你想动态创建模板,其中一些模板中包含Angular属性,然后将它们附加到DOM。

首先,(希望)回答你的问题,关于何时调用$ compile:

每当你从Angular的模板系统外部加载HTML时(比如尝试设置$(element).html(myHtmlString)),你需要让Angular在将它附加到DOM之前编译它。换句话说:

elem.append($compile(yourHTMLString)(scope));

这允许Angular遍历DOM并解析任何指令和绑定,并将它们附加到提供的范围。如果你没有$ compile,Angular根本不知道那些预期的绑定,Angular永远不会读取HTML。

其次,我不知道您希望模板有多灵活,但如果它们相对固定,但有一些固定的可自定义选项(文本,颜色,字体大小等),您可能最好创建每个'视图'的指令,视图选项绑定到指令的范围。然后,您只需更改右侧面板中指令范围的字段,视图将直接更新。在这种情况下,你甚至不必使用$ compile。

如果您希望用户能够手动添加模板HTML代码,则必须按上述方法编译HTML。