我正在使用angular-translate
代替i18n。有点不幸的是,$ translate服务异步加载字符串。
我已经复制了相关的控制器代码。在加载翻译后,用新的项目数组替换当前数据源项目的最佳方法是什么? (或在用户签到此案例后)。代码看起来有点笨拙。
请参阅下面的我的尝试。
var items = [
{
text: 'This option remains',
uiState: 'signin',
icon: 'user'
}];
$scope.accountMenuDS = new DevExpress.data.DataSource({
store: {
type: "array",
key: "text",
data: items
}
});
$translate(['users.signin']).then(function (trans) {
if (!user) {
var newItems = [
{
text: 'hello',
uiState: 'signin',
icon: 'key'
}
];
Array.prototype.splice.apply(items, [0, newItems.length].concat(newItems)); // is there a better way than this?
$scope.accountMenuDS.reload();
} else {
// handle signed in case later
}
});
答案 0 :(得分:1)
在您的情况下,您可以使用bindingOptions字段提供双向绑定:
<div ng-controller="myCtrl">
<div dx-menu="menuOptions"></div>
<div dx-button="buttonOptions"></div>
</div>
控制器代码:
myApp.controller("myCtrl", function($scope) {
$scope.menuData = [/*...*/];
$scope.menuOptions = {
bindingOptions: {
dataSource: "menuData"
}
};
$scope.buttonOptions = {
text: "Update data",
onClick: function() {
$scope.menuData.push({
text: "Item 3"
});
}
};
});
同样见plunker demo。