Как поместить переменную в z ZeppelinContext в javascript в Zeppelin?

В Scala и Python это:

z.put("varname", variable)

Но в javascript я получаю (в консоли)

Uncaught ReferenceError: z is not defined

Что я действительно хочу сделать, так это получить доступ к переменной javascript из кода Scala, используя z.angular("varname") в Zeppelin, но мне не повезло :(

В полной необходимости в одной камере что-то вроде

%angular
<script>
var myVar = "hello world";

// some magic code here!
</script>

Потом в другой клетке

println(z.angular("myVar"))

ОБНОВИТЬ:

Это то, что у меня есть до сих пор, я полностью копаю в темноте, так как я больше из тех парней, которые занимаются бэкэндом / наукой о данных. Так что заранее извиняюсь за мою безнадежность переднего конца.

Ячейка 1:

z.angularBind("myVar", "myVar")
z.angularBind("msg", "msg")

Примечание. Я понятия не имею, что указать во втором аргументе.

Ячейка 2:

%angular

<div ng-app>
    <div id="outer" ng-controller="MsgCtrl">
        You are {{msg}}
    </div>
    <div onclick="change()">click me</div>
</div>

<script>
var myVar = "hello world";

function MsgCtrl($scope) 
{
    $scope.msg = "foo";
    // also experimented with $scope.msg = myVar;
}

function change() {
    var scope = angular.element($("#outer")).scope();
    scope.$apply(function(){
        scope.msg = 'Superhero';
    })
}
</script>

Ячейка 3:

z.angular("msg")
z.angular("myVar")

И что бы я ни делал, я получаю либо null, либо имя переменной.

Я не вижу ни кнопки, ни чего-то, что можно было бы "щелкнуть".


person samthebest    schedule 12.07.2016    source источник


Ответы (2)


В интерпретаторе Angular. мы можем

  • Использовать в html-контенте

    {{name}}

  • Связать с

    ng-model='name'

  • Используйте или установите с помощью ng-click или других угловых директив.

    ng-click="name='Rockie'"

Согласно многим SO, изменение переменной области видимости вне контроллера angular не является хорошей практикой. Я также не заставил его работать в Zeppelin. Однако есть нормальный пример скрипта js.

И в интерпретаторе Spark. Мы можем

  • Связать с

    z.angularBind("name", "Knock Data")

  • Отвязать с

    z.angularUnbind("name")

  • Получите значение с помощью переменной, которую необходимо сначала связать, иначе она получит значение null.

    z.angular("name")

  • Смотреть переменную с

    z.angularWatch("name", (oldValue: Object, newValue: Object) => { println(s"value changed from $oldValue to $newValue" })

Кроме угловой привязки. Динамическая форма — хороший способ предоставить конечным пользователям интерактивные

  • Вход

    z.input("number", 1).toString.toInt

  • Выбрать без значения по умолчанию

    z.select("Day", Seq(("1", "Mon"), ("2", "Tue")))

  • Выберите со значением по умолчанию,

    z.select("Day", "1", Seq(("1", "Mon"), ("2", "Tue")))

  • Проверять

    z.checkbox("good applications", Seq(("1", "Zeppelin"), ("2", "Highcharts"), ("3", "Spark")))

person Rockie Yang    schedule 13.07.2016
comment
Спасибо, я многому научился, читая это. Поэтому я добавил <div ng-model='myVar'> в конец моей ячейки %angular, но я все еще получаю null вместо z.angular("myVar") в ячейке Scala :( Я также пробовал играть с примером в ссылке, но я просто продолжал получать null вместо z.angular("msg") :( - person samthebest; 14.07.2016
comment
сначала вам нужен z.angularBind, затем ng-model. после этого вы можете получить значение с помощью z.angular. - person Rockie Yang; 14.07.2016
comment
Спасибо, я обновил свой ответ, чтобы показать, что у меня есть. - person samthebest; 15.07.2016
comment
Чего мне не хватает, так это того, как запускать код javascript при изменении углового значения. Я хочу сделать z.angularBind(data, data) в цикле, и моя логика повторного отображения в javascript будет запускаться при изменении данных. - person Aaron McMillin; 15.09.2016

это сработало для меня

% угловой

<div id="map" style="height: 300px; width: 50%" ng-model="id_selected_arr"/>

%spark2

var result = z.angular("id_selected_arr")

Но я столкнулся с другой проблемой, как обработать массив... Может быть, кто-то ответит вам, и это может помочь вам. Проверьте это здесь

person la_femme_it    schedule 27.09.2019