Anglularjs从Controller,State Resolve和Factory Service传递价值

时间:2017-06-16 02:32:00

标签: angularjs angular-ui-router ng-controller

好的,我的问题有三个相关文件..

App.js - app.config

使用app.config resolve中的$stateParams传递值是可能的,我就可以实现。但价值来自controller?我需要provCode值才能在php select query中使用它。

.state("editStudent", {
    abstract: true,
    url:"/student/:id",
    controller: "EditStudentController",
    templateUrl: "views/students/editStudent.html",
    resolve: {
      dataservice: 'dataservice',
      student: function(dataservice, $stateParams){
        var data ={ 
          id : $stateParams.id
        };
        return dataservice.getStudent(data);
      },
      provinceData: function(dataservice){
        return dataservice.getProvince();
      },
      municipalityData: function(dataservice){
        var provCode = {
          provCode : '0456'    // <--------------------- this one 
        }
        return dataservice.getCity(provCode);
      }

    }
    })

EditStudentController.js - app.controller

在我的app.controller中,我使用angular.forEach查找province codeid来使用php select query。正如您所看到的,我尝试创建函数app.getCity但它没有按预期工作。

console.log(provinceData);
$scope.provinceData = provinceData;


var retProv = $scope.studentInfo.province;

angular.forEach(provinceData, function(value, key) {
    if(value.provDesc == retProv){
    $scope.studentInfo.province = provinceData[key];
    $scope.provCode =  provinceData[key].provCode;
    console.log($scope.provCode); 
    }   
}); // angular.forEach

var provCode = $scope.provCode;

// Test if it is working but sadly, it is not 
// $scope.getCity = function(){
//    dataservice.getCity(provCode);
// }

Dataservice.js - app.factory

在我的app.factory中,目前有3个功能。其他2个函数可以正常工作,但factory.getCity()现在是我的问题。如您所见,有一个参数provCode,此参数来自我的app.config state resolve,并且已为其分配了硬编码/静态值。

factory.getStudent = function(data){
    return $http.post("php/students/viewOneStudent.php",data).then(function(response){
        student = response.data[0];
        console.log(student);
        return student;
    })
}

factory.getProvince = function(){
    return $http.get('php/address/province.php').then(function(response){
        provinceData = response.data;
        console.log(provinceData); 
        return provinceData;
    })
}

factory.getCity = function(provCode){
    return $http.post('php/address/cities.php', provCode).then(function(response){
        municipalityData = response.data;
        console.log(municipalityData);  
        return municipalityData;
    })
}

我的问题是:

  1. 如果可以将值从controller传递到resolve
  2. 如果有可能,我该怎么做?因为我尝试了最好的试错法。
  3. 如果不可能,我的选择是什么来实现我的目标?
  4. 注意

    我试图在没有resolve的情况下执行此操作,获取数据并再次发布php querying,它也有效但问题是有时加载view时数据无法加载。据我所知,从互联网上的不同来源阅读和理解,有一段时间view已加载,但“处理数据的工作”尚未完成..

    我很新,还在学习AngularJs。当我练习和学习AngularJs编码时,我喜欢它的工作原理,尤其是routing,我对它印象深刻。所以,我正在努力了解AngularJs及其复杂性。

    更新 我尝试了不同的方法来获得预期的结果。但我无法达到它,我遇到了一个错误。这是我的另一种方法的链接。

    Undefined property: stdClass: in using AngularJS + PHP

0 个答案:

没有答案