离子状态控制器在$ state.go之后不会执行

时间:2015-06-03 00:25:33

标签: angularjs controller ionic

我遇到了离子及其状态功能的一些问题。

基本上,我从远程服务器检索一些数据,我以视图/状态显示。

如果用户点击我显示的其中一个元素,它会调用一个范围函数,通过$ state.go(' other_view',{params})调用来改变$状态... 直到这里没有问题,事情是它确实改变了状态,分配给状态的控制器没有执行,甚至不能让它显示一个简单的console.log("你好&#34 ;)

这里简单说明了我的体验。

#include <iostream>
#include <memory>

class Base
{
    virtual void delegate(int x) = 0;
public:
    Base& operator<<( int x) // we define this only in Base
    {
        delegate(x); // delegate, this must be overridden in all derived classes
        return *this;
    }
    virtual ~Base() = default;
};

void Base::delegate(int x) // we can even define this
{
    std::cout << "Base::delegate x = " << x << std::endl;
}

class A : public Base
{
    void delegate(int x) override
    {
        std::cout << "A::delegate x = " << x << std::endl;
    }
};

class B : public Base
{
    void delegate(int x) override
    {
        std::cout << "B::delegate x = " << x << std::endl;
    }
};

int main()
{
    std::unique_ptr<Base> pBase(new B);
    *pBase << 42;
}

这个状态/视图导致另一个非常相似的状态/视图,下一个状态/视图的控制器一旦加载就不会执行。

var incaRooms = angular.module('inca.rooms', ['ionic','ui.router', 'cb.x2js','ngSanitize'])


// ----------------------------
// config for the app (routing)
// ----------------------------



.config(function($stateProvider, $urlRouterProvider) {
    $stateProvider
        .state('rooms',{
            url: '/rooms',
            templateUrl: 'scripts/rooms/rooms.html',
            controller : controllers.roomsController,
            resolve : {
                // data loading
                jsonData : function($http) {
                  return $http.get("assets/data.xml")
                  .then(function (data) { // promise

                    var x2js = new X2JS();
                    jsonData = x2js.xml_str2json(data.data);

                    return jsonData;
                  });
                }
            },
            cache : false
        });
});

/////////////////
// CONTROLLERS //
/////////////////

var controllers = {};

// rooms
controllers.roomsController = roomsController;
incaRooms.controller('getters', controllers.roomsController);


///////////////////////
// GENERAL FUNCTIONS //
///////////////////////

function getUnit(jsonresult,unit_id){
  var infoUnit = jsonresult.UNIT_LIST.UNIT;
  return infoUnit;
}


/////////////////
// CONTROLLERS //
/////////////////

function roomsController($scope,$state, $ionicHistory, $ionicPopup, $ionicScrollDelegate,$ionicLoading, jsonData){

  var unit = getUnit(jsonData,0);
  $scope.unit = unit;


  $scope.selectRoom = function(index){
  $state.go('patients',{'indexRoom' : index, 'jsonData' :  JSON.stringify(jsonData)});
  }



}

有关为什么没有执行console.log的任何线索?

提前感谢您的时间和帮助。

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题。但我通过将 ion-view 元素的 cache-view 属性设置为 false 来修复它。

<ion-view title="View Title" ng-controller="someCtrl" cache-view="false">
    ...
</ion-view>

答案 1 :(得分:0)

所以我终于找到了问题所在。 您似乎无法将单个控制器放入我创建的控制器变量中。或者至少从stateProvider那里得知它。

我只是调用函数patientsController而不是controllers.patientsController,它工作得很好! 无论如何,这个变量不再有用,因为我只有一个控制器用于这些状态。