2013-02-11 31 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代码放入玉石

相关问题