如何将自定义数据从 ui-router 中的视图传递到状态?

how can I pass custom data to a state from a view in ui-router?

我正在使用 $stateProvider 进行路由配置。我想利用他们提供的自定义数据将一些自定义数据从一个部分页面传递到另一个页面(ng-click)。

这是迄今为止我得到的最好的:

将自定义数据附加到状态对象

您可以将自定义数据附加到状态对象(我们建议使用数据 属性 以避免冲突)。

// Example shows an object-based state and a string-based state 
var contacts = { 
    name: 'contacts',
    templateUrl: 'contacts.html',
    data: {
        customData1: 5,
        customData2: "blue"
    }
} 
$stateProvider
    .state(contacts)
    .state('contacts.list', {
        templateUrl: 'contacts.list.html',
        data: {
            customData1: 44,
            customData2: "red"
        }
    }) 

在上面的示例中,您可以像这样访问数据:

function Ctrl($state){
     console.log($state.current.data.customData1) // outputs 5;
     console.log($state.current.data.customData2) // outputs "blue";
 }

Source

假设我有另一个名为 customers 的状态,它有自己的模板和控制器。如何更改客户 controller/view 中联系人状态数据对象的值?即:我想改变这个:

data: {
    customData1: 44,
    customData2: "red"
} 

对此:

data: {
    customData1: 100,
    customData2: "green"
} 

任何指示或示例将不胜感激!

已修改 - 我自己搞定了,方法如下:. 在控制器上(例如:customerCtrl),您可以通过名称获取联系人的状态并进行所需的更改 - 例如更新自定义数据对象的 属性 值,如下所示:

 //get the state by name and change the value of custom data property

 $state.get('contacts').data.customData1= 100;
 $state.go('contacts'); // then you can make a go to that state.

我自己搞定了,方法如下。在控制器上(例如:customerCtrl),您可以通过名称获取联系人的状态(https://github.com/angular-ui/ui-router/wiki/Quick-Reference#statename 并寻找 $state.get([stateName]) )
一旦你获得状态,你就可以做出你想要的改变——比如更新自定义数据对象的属性值如下:

//get the state by name and change the value of custom data property 
 $state.get('contacts').data.customData1= 100;
  // then you can go to that state.
 $state.go('contacts');

我希望这会对某人有所帮助。

如果您尝试读取当前状态的自定义数据,您可以轻松地将其读取为 $state.current.data.customData1 = 100;