我有一個AngularJS模塊,它定義了一個很好的指令,可以從scr="filename"
屬性中顯示WebGL場景。這工作得很好,(在這裏和那裏剪斷)看起來大致是這樣的:角度:控制器 - 指令交互與關注點分離
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中,控制器應該能夠在沒有指令的情況下工作,反之亦然 - 無需瞭解彼此的任何信息。這是否意味着控制器不能直接修改scope.scene
對象?那麼,人們如何去做呢?
就像猜測一樣,控制器是否應該旋轉而不知道它在旋轉什麼?那麼指令應該如何挑選呢?
或者,控制器編輯scope.scene
是否完全正常?那麼我的問題是如何將它從隔離中分離出來?
你已經用src設置了一個獨立的作用域,那麼你爲什麼使用attrs.src而不是scope.src?而且,由於您已設置了隔離範圍,控制器將無法更新scope.scene,因爲它無法訪問它。 –
要擴展@AbhishekJain評論,請參閱隔離範圍文檔https://docs.angularjs.org/guide/directive#isolating-the-scope-of-a-directive。從這裏,你在視圖中鏈接2,通過屬性 –
除了我認爲我必須使用'='以外,這不是故意的,所以我可以在一個控制器中有兩個ng-3對象。也許我誤解了教程。 – Paul