使用submit更新$ scope

时间:2014-02-24 20:58:46

标签: angularjs scope submit

我正在为这个项目使用angularjs,我想要做的就是在一个视图上输入一个zipcode,并在点击提交时在下一个视图中显示结果天气。问题是$ scope.zipcode没有使用新的zipcode进行更新。如果起始代码留空,则console.log表示未定义,如果我在其中放置某些内容,结果将显示为默认zip,但不会显示其他任何内容。请帮忙。谢谢。

好的,所以这是我的代码

路由配置

/* routing configs */      

var weather1 = angular.module('weather1', ['ngRoute']);

weather1.config(['$routeProvider', function($routeProvider){
$routeProvider
    .when('/show',{
        templateUrl:'templates/showWeather.html',
        controller: 'WeatherController'})
    .when('/default',{
        templateUrl:'templates/inputZip.html',
        controller: 'WeatherController'})
    .when('/about',{
        templateUrl:'templates/about.html',
        })

    .otherwise({
        redirectTo: '/default'
    });
}]);

控制器

/* cntrls */

weather1.controller('WeatherController', function($http, $scope, $location) {
$scope.list = [];
$scope.zipcode = '';
var zip = '99114';
var urlBase = 'http://api.wunderground.com/api/cf6c8139e5b43574/conditions/q/';
var call = '.json?callback=JSON_CALLBACK';
var request = urlBase.concat($scope.zipcode,call);

$scope.submit = function(){
        if($scope.zipcode){
            $scope.list.push(this.zipcode);
            $scope.zipcode='';
            $location.path('/show');
        }
};
    $http.jsonp('http://api.wunderground.com/api/cf6c8139e5b43574/conditions/q/' + zip + '.json?callback=JSON_CALLBACK').success(function(data) {
        $scope.weather = data.current_observation;
    console.log($scope.weather);
    }).error(function(data) {
        console.log('fail');
    });
});

inputZip.html

<form ng-submit="submit()">
    <input type='text' name='zipcode' ng-model='zipcode' required> 
    <input type='submit' id='submit' value='Check weather' />
</form>

showWeather.html

<font size='75'>{{weather.temp_f}}</font>F;  {{weather.weather}} in {{weather.display_location.full}} <img src='{{weather.icon_url}}'>
<a href='#/default'>Back</a>

1 个答案:

答案 0 :(得分:0)

我认为当你执行location.path('/show');时,你实际上是在创建一个新的控制器实例,即使它是同一个控制器。这就是你失去价值的原因。您应该确保不重新初始化控制器或使用服务在两个控制器之间共享数据。