У меня есть модуль AngularJS, который определяет красивую директиву, которая может отображать сцену WebGL из атрибута scr="filename"
. Это работает хорошо и (отрезано здесь и там) выглядит примерно так:
angular.module('ThreeViewer', [])
.directive('three', ['$http', function ($http) {
return {
link: function (scope, element, attr) {
scope.renderer = new SceneRenderer(element[0])
$http.get(attr.src)
.success(function (json) {
var loader = new THREE.ObjectLoader()
var scene = loader.parse(json)
this.scene = scene
this.renderer.setScene(scene)
}.bind(scope))
},
restrict: 'AC',
scope: {
src: '='
}
}
}])
Итак, что он делает, так это загружает сцену, сохраняет ее в области видимости и передает ее рендереру. Это работает.
Теперь я хочу создать контроллер, чтобы пользователь мог взаимодействовать с данными, например, вращать объект. У меня вопрос: как к этому подойти, придерживаясь парадигмы Angular разделения ответственности? Насколько я понимаю, в Angular контроллер должен работать без директивы и наоборот - ничего не зная друг о друге. Означает ли это, что контроллер не может напрямую изменять объект scope.scene
? Тогда как это сделать?
Просто предположение, должен ли контроллер просто «вращаться», не зная, что он вращается? И как тогда директива должна это уловить?
Или, наоборот, контроллер может редактировать scope.scene
? Тогда у меня вопрос, как мне вырваться из изоляции?