大家好,
我想請問一個關於AngularJS component的問題,
程式碼如圖所示:
我想請教的是,
$scope這個物件的作用域只在constructor函式裡而已,
我該如何將這個$scope指定給全域的變數呢?
此題目我也有在Stack Overflow上發問,大家也可以直接前往Stack Overflow上回覆,連結如下:
煩請大家不吝指教,感激不盡!!
大家好,
我想請問一個關於AngularJS component的問題,
程式碼如圖所示:
我想請教的是,
$scope這個物件的作用域只在constructor函式裡而已,
我該如何將這個$scope指定給全域的變數呢?
此題目我也有在Stack Overflow上發問,大家也可以直接前往Stack Overflow上回覆,連結如下:
煩請大家不吝指教,感激不盡!!
以下寫法你參考一下
#寫法1
ctrler.$inject = ['$scope', '$cordovaDevice'];
class ctrler {
constructor(private $scope, private $cordovaDevice){
....
}
methodA(){
this.$scope.title = '';
}
}
但是通常寫到這邊,已經很少在使用 $scope 了,搭配 ControllerAs 就可以不用 $scope.
ctrler.$inject = '$cordovaDevice'];
class ctrler {
title: string;
constructor(private $cordovaDevice){
....
}
methodA(){
this.title= '....';
}
}
定義 Controller
controller: ctrler,
controllerAs: 'vm',
頁面的地方就會這樣子使用
{{ vm.title }}
非常感謝您抽空回覆!!
我有按照你的方式去去嘗試看看了,可惜的是還是沒能成功,其中我有兩個問題:
private
之後,Editor有報錯,表示那是TypeScript
的用法,所以不讓我加。你可以在寫一個單獨的 method 測試你的 this.$scope 嗎?
我覺得是 this
在作怪,因為你的 onDeviceReady 是 addEventListener 的callback
所以在執行時, onDeviceReady內的 this 非 ctrler
我懂你的意思了!
因為this所指向的物件不一樣,callback裡的this所指向的應該是document,但其實我要指向的應該要是Controller才對。
那這下子就麻煩了,我不想用匿名函式就是為了想再onDestory的時候可以remove掉這個listener,避免重複add ~"~
我試了一下,
我這樣子寫的話$scope
本身的確是全域的沒錯,我在$onInit
裡是可以將$scope
印出來的,所以其實重點是在於eventListener
的callback
裡的this
指標問題。
那我這樣子可能要將Listener移到run
裡面,再用別的service去控制了。
總而言之,真的非常感謝您願意抽空回覆,感激不盡!!
如果是callback this 的問題到好解決
document.addEventListener.('deviceready', this.onDeviceReady.bind(this))
利用 bind 將 controller(this) 傳進去就可以了
原來如此!!非常感謝你的回覆!!