Apache Zeppelin中的前端Angular API
基本用法
除了后端Angular API用于处理Angular对象绑定外,Apache Zeppelin还在前端暴露了一个简单的AngularJS z对象,以提供相同的功能。
这个z对象在每个段落的Angular隔离作用域中都可以访问。
绑定/解绑变量
通过z,你可以将变量绑定/解绑到AngularJS视图。
将一个值绑定到一个angular对象和一个强制目标段落:
%angular
<form class="form-inline">
<div class="form-group">
<label for="superheroId">Super Hero: </label>
<input type="text" class="form-control" id="superheroId" placeholder="Superhero name ..." ng-model="superhero"></input>
</div>
<button type="submit" class="btn btn-primary" ng-click="z.angularBind('superhero',superhero,'20160222-232336_1472609686')"> Bind</button>
</form>

从angular对象中解绑/移除一个值,并且有一个强制性的目标段落:
%angular
<form class="form-inline">
<button type="submit" class="btn btn-primary" ng-click="z.angularUnbind('superhero','20160222-232336_1472609686')"> UnBind</button>
</form>

z.angularBind() / z.angularUnbind() 函数的签名为:
// Bind
z.angularBind(angularObjectName, angularObjectValue, paragraphId);
// Unbind
z.angularUnbind(angularObjectName, angularObjectValue, paragraphId);
所有参数都是必填的。
运行段落
你也可以通过调用z.runParagraph()函数并传递适当的paragraphId来触发段落执行:
%angular
<form class="form-inline">
<div class="form-group">
<label for="paragraphId">Paragraph Id: </label>
<input type="text" class="form-control" id="paragraphId" placeholder="Paragraph Id ..." ng-model="paragraph"></input>
</div>
<button type="submit" class="btn btn-primary" ng-click="z.runParagraph(paragraph)"> Run Paragraph</button>
</form>

使用Angular对象覆盖动态表单
前端Angular交互API旨在提供更丰富的表单功能和变量绑定。使用现有的动态表单系统,您已经可以创建输入文本、选择和复选框表单,但选择相当有限,外观和感觉无法更改。
想法是使用普通的HTML/AngularJS代码创建一个自定义表单,并在此表单上绑定操作,以使用这个新的API将Angular变量推送到目标段落或从中移除。
因此,如果您在段落中使用动态表单语法,并且有一个与${formName}同名的绑定Angular对象,Angular对象将具有更高的优先级,动态表单将不会显示。示例:

特征矩阵比较
前端AngularJS API与后端Angular API相比如何?以下是两个API的比较矩阵:
| 操作 | 前端 API | 后端 API |
|---|---|---|
| 初始化绑定 | z.angularbind(var, initialValue, paragraphId) | z.angularBind(var, initialValue) |
| 更新值 | 与普通的angularjs作用域变量相同,或使用z.angularbind(var, newValue, paragraphId) | z.angularBind(var, newValue) |
| 观察值 | 与普通的angularjs作用域变量相同 | z.angularWatch(var, (oldVal, newVal) => ...) |
| 销毁绑定 | z.angularUnbind(var, paragraphId) | z.angularUnbind(var) |
| 执行段落 | z.runParagraph(paragraphId) | z.run(paragraphId) |
| 执行段落(其他笔记中的特定段落) | z.run(noteid, paragraphId) | |
| 执行笔记 | z.runNote(noteId) |
除了值监视在前端由AngularJS内部自然完成,在后端由用户自定义监视函数完成外,这两个API非常相似。
在作用域方面也存在一些细微的差异。前端API将Angular对象绑定限制在段落作用域内,而后端API允许您在全局或笔记作用域内绑定Angular对象。这种限制是特意设计的,以避免Angular对象泄漏和作用域污染。