
用了 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 $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 还要要传回调啊 |