我遇到了离子及其状态功能的一些问题。
基本上,我从远程服务器检索一些数据,我以视图/状态显示。
如果用户点击我显示的其中一个元素,它会调用一个范围函数,通过$ 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的任何线索?
提前感谢您的时间和帮助。
答案 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,它工作得很好! 无论如何,这个变量不再有用,因为我只有一个控制器用于这些状态。