用了 AngularJS 框架,
var price = 0;
$http.get('http://XXXX.com/getPrice').success(function(res){
price = res.price;
})
$scope.$on('echoPrice',function(){
console.log(price); //当别的 controller 广播 echoPrice 事件的时候
// 这个 price 打印出来始终是 0
})
是有没有一种方法可以延时赋值,或者说是当收到别的 controller 的广播事件后,再取这个 price 的值 ?
只能放到回调里面么? 感觉好蛋痛啊!!
1
Automan 2015-12-29 19:26:12 +08:00 1
$scope.price= 0 ;
console.log($scope.price); |
2
wensonsmith OP |
3
Automan 2015-12-29 19:31:59 +08:00
@wensonsmith $scope 就是干这事儿的啊
|
4
oubushixb 2015-12-29 19:33:20 +08:00
可以选择直接在广播事件中传递 price..
`$rootScope.$broadcast('echoPrice', price); $scope.$on('echoPrice', function (e,price){ console.log(price); })` |
5
wensonsmith OP @oubushixb 这条路想过,不过其他 controller 广播这个事件的时候取这个 price 太麻烦了
|
6
wensonsmith OP @Automan 为啥直接定义一个变量不行,$scope 就可以延时赋值, $scope 采用了啥黑科技
|
7
FrankFang128 2015-12-29 19:39:41 +08:00
不知道有什么蛋疼的
让异步的东西看起来像异步吧 |
8
chairuosen 2015-12-29 19:43:31 +08:00
我没看出 LZ 的问题问的啥,也没看出 1L 的回答回的啥。你们都看出来了?
|
9
attker 2015-12-29 19:48:46 +08:00 via iPhone
一楼这是在讽刺吧, price 经过 0 秒后把 price 打印出来
|
10
chairuosen 2015-12-29 19:49:56 +08:00
LZ 是想在有人来问 price 的时候告诉他 price ,然后问后端 price 是异步的,所以想预加载一下么?把 promise 存下来在事件回调里接着 then 一下?
|
11
oubushixb 2015-12-29 19:50:52 +08:00
@wensonsmith 如果是多个 controller 想要共享变量的话,把 price 变量存到 servie 里才是最好的..
详细可以看看 todd motto 的文章 https://toddmotto.com/rethinking-angular-js-controllers/ |
12
Automan 2015-12-29 19:57:17 +08:00
和异步没关系。。这个问题是因为上下文。。
|
13
bdbai 2015-12-29 20:28:38 +08:00 via iPhone
打开浏览器调试工具,分别在回调函数里面和下面下断点,然后跟着跑一遍。
|
14
chemzqm 2015-12-29 20:48:52 +08:00
是 Angular 蛋疼才对吧,正常逻辑应该应该是在回调里继续执行,这货非要让你用同步方式去写
|
15
Biwood 2015-12-29 21:46:38 +08:00
1 楼的写法不就是 Angular.js 的精华么,这都不知道还用什么 Angular.js
|
16
imdoge 2015-12-29 23:09:05 +08:00
$http.get 和 echoPrice 事件有关系的么,还是只初始化的$http.get 一次,那没理由是 0 啊
如果有关系的话一般这样: 在 factory (比如在 Service 服务的命名为'echoPrice'方法里) return $http.get('http://XXXX.com/getPrice'); 然后在 controller 里 Service.echoPrice().then(function(data){ $scope.price = data.data; }); 异步一般用 promise |
17
wensonsmith OP @Biwood 不用不知道是精华啊~ 刚开始用 : D
|
18
wensonsmith OP @attker 不是,使用$scope.price 这个放在异步请求里, 下面的函数可以获取到异步回来的值了~
|
19
wensonsmith OP @FrankFang128 Promise 不是为了让异步不像异步?
|
20
wizardoz 2015-12-30 09:29:48 +08:00
感觉楼主是没搞清楚闭包。
传递给“ echoPrice ”的是一个函数,当创建函数作为参数或者返回值的时候,闭包就创建了。 |
21
FrankFang128 2015-12-30 11:24:04 +08:00
@wensonsmith Promise 还要要传回调啊
|