0

У меня есть Угловая услуга/значение, которое пытается получить переменную, но она берет оригинал вместо нового. Новая переменная должна быть одна внутри $ (документ) .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 держит строку «массива», он держит «ASDF». Я подозреваю, что это потому, что app.value («DBcontent», db) выполняется сразу, даже до $ (document) .ready(). Я попытался поместить var db за пределы $ (document) .ready(), но это нарушает его. Кто-нибудь знает, что я могу здесь сделать?

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

+0

app.value будет присвоено до того, как будут готовы огненные события – charlietfl

ответ

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> 
+0

Перемещение app.value (..) внутри $ (document) .ready() приведет к поломке кода и приведет к ошибке: $ injector: unpr Unknown Provider. Кажется, что angular.value (..) может быть создан изнутри jQuery. –

+0

Ах, я пропустил это, исправляя свой ответ. Другая линия также должна двигаться. – Draco18s

+0

* не может быть создан изнутри jQuery
Даже добавление углового модуля («приложение», []) внутри $ (document) .ready() не будет работать. –

0

Фундаментально вы отметили db переменную внутри функции $document.ready() как местные, предваряя его с var.

Переменная внутри функции не будет обновлять глобальную переменную db, определенную рядом с угловым приложением.

Также обратите внимание, что app.value("DBcontent", db); работает до $document.ready(). Если вам нужно передать угловую переменную чем-нибудь из DOM, сделайте элемент DOM директивой и установите значения в области. Или вы также можете использовать ng-init в этом случае.

+0

Хорошая добыча! Я исправил var db. Как в этом случае будет соответствовать ng-init? Если бы вы могли привести пример? :) –