2013-02-11 91 views
2

我使用的角度玉模板和我在模板一些javascript:Angular.js可以在腳本標記中的Jade模板中插值嗎?

script(type='text/javascript') 
    console.log('{{name}}'); 

在我的角度控制器我這樣做如下:

$scope.name = "Bhoutrous"; 

我可以得到{{名}}只要不在腳本標記下,就可以正確插入模板中的任何其他位置。對我來說,角度拋出一個「SyntaxError:無效的屬性ID」錯誤。我想知道這是一個Jade問題還是存在解決方法。當頁面加載時,我需要將'name'變量的內容傳遞給js函數。

UPDATE

我知道,它可以與常規模板。小提琴下面的例子:http://jsfiddle.net/atentaten/mnscA/

有沒有人有使用玉做這樣的事情的經驗?

HTML:

<div ng-controller="UserCtrl"> 
    <p>{{data}}</p> 
    <div id="dat"></div> 

    <script type="text/javascript"> 
     function doit(text){ 
      var el = document.getElementById("dat"); 
      el.innerHTML = text; 
     } 

     doit('{{data}}'); 
    </script> 
</div> 

JS:

var app=angular.module('myApp', []); 

function UserCtrl($scope) { 
     $scope.data = "Green Applese"; 

}; 
+0

您是否查看了輸出的HTML以查看AngularJS實際正在渲染和使用的內容? – 2013-09-13 22:05:07

回答

0

角確實插值DOM元素。腳本標記和其他隨機字符串的內容不是內插的。您可以在Angular應用程序生命週期之外訪問Angular服務,包括$interpolate服務; I answered a question much like this yesterday。但是,就像在這個答案中一樣,我認爲這不是用Angular編寫應用程序的好方法。

+0

好吧,字符串正在每個小提琴的腳本標記內插。然而,我通過向$ scope添加一個函數來解決了這個問題:$ scope.myfunction = function(){//所需的變量從$ routeParams中獲得,並且使用它。}在模板中,我調用了函數這{{myfunction()}}和它的工作完美。這被認爲是一個好方法嗎?如果不是,最好的辦法是什麼?我不想要雙向數據綁定,只需要將參數傳遞給頁面加載時調用的函數。 – Kunle 2013-02-11 05:07:04

+0

另外,在另一個問題的例子中,js駐留在哪個文件/位置? – Kunle 2013-02-11 05:14:00

+0

我不確定你想要完成什麼。如果你想在第一次加載時在控制器的作用域上運行一個函數,我可能會使用'ngInit'指令:http://docs.angularjs.org/api/ng.directive:ngInit在另一個問題中,JavaScript可以位於頁面加載的任何文件中。 – 2013-02-11 05:50:21

0

一種形式,工作爲我

div(ng-controller="UserCtrl",anotherAttr="yourValue") 
    p#dataBind {{data}} 
    div#dat 
    script. 
     function doit(text){ 
      $("#dat").html(text) 
     }  
     doit($("#dataBind").text()); 

注意點 「」在腳本標記之後,這允許將js代碼放入玉石

相關問題