Angular服务/值没有从$(document).ready()获取新的var

时间:2016-01-15 17:44:32

标签: javascript jquery angularjs document-ready angular-services

我有一个Angular服务/值试图获取一个变量,但是它会获取原始变量而不是新变量。新变量应该是$(document).ready()中的变量,如下所示:

var app = angular.module("app", []);
var db = "asdf"
$(document).ready(function(){
    // document.getElementById("DB_content").value === '[{"name":"Joe", "age":"19"}, {"name":"Jill", "age":"21"}]'
    db = document.getElementById("DB_content").value;
    console.log(db);
});
app.value("DBcontent", db);

但不是DBcontent持有字符串“array”,而是持有“asdf”。我怀疑是因为app.value(“DBcontent”,db)正在立即执行,甚至在$(document).ready()之前。我已经尝试将var db放在$(document).ready()之外,但是它打破了它。有谁知道我能在这做什么?

https://jsfiddle.net/dop49d54/4/

2 个答案:

答案 0 :(得分:2)

app.value(...)会在$(document).ready(...)

之前立即运行

如果您希望它具有在$(document).ready(...)中获取的值,则需要将其移动到该事件处理程序中。

$(document).ready(function(){
    var app = angular.module("app", []);
    // document.getElementById("DB_content").value === '[{"name":"Joe", "age":"19"}, {"name":"Jill", "age":"21"}]'
    var db = document.getElementById("DB_content").value;
    console.log(db);
    app.value("DBcontent", db);
});

<script>标记向下移动到<body>的底部将起作用!

<script>
var db = "asdf";
(function go(){
    db = document.getElementById("DB_content").value;
    console.log(db);
    app.value("DBcontent", db);
})();
<script>

答案 1 :(得分:0)

从根本上说,您已将db函数中的$document.ready()变量标记为本地,前缀为var

函数内的db变量不会更新角度应用旁边定义的全局db变量。

另请注意app.value("DBcontent", db);$document.ready()之前运行。如果需要使用DOM中的某些内容提供角度变量,请将DOM元素作为指令并在范围中设置值。或者您也可以在这种情况下使用ng-init