假设我有一个JSON有效负载,解析成这样的东西:
{
name: "test",
items: {
"a": {
id: 1,
size: 10
},
"b": {
id: 2,
size: 34
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何设置Example接口的定义以建模items属性的值是一个对象,其键是字符串,其值由Item接口定义:
export interface Example {
name: string;
items: ???;
}
export interface Item {
id: number;
size: number;
}
Run Code Online (Sandbox Code Playgroud) 我有一个问题,了解$ interval返回的承诺如何在Angular中起作用.
比方说,在下面的例子中,我们有一个简单的"API"工厂被称为一个"getStuff",它返回一个项目阵列的方法.我们还有一个控制器在该工厂调用$ timeout:
angular.module("app",[])
.factory('api', function(){
return {
getStuff: function() {
return ["stuff"];
}
};
})
.controller('appCtrl', function($scope, $timeout, api){
$timeout(api.getStuff, 1000)
.then(function(response){
console.log(response);
});
})
Run Code Online (Sandbox Code Playgroud)
这将在1秒后在控制台中记录'["stuff"]',这很好.
所以假设我想通过用$ interval替换$ timeout来每秒调用该方法.现在没有任何反应
angular.module("app",[])
.factory('api', function(){
return {
getStuff: function() {
return ["stuff"];
}
};
})
.controller('appCtrl', function($scope, $interval, api){
$interval(api.getStuff, 1000)
.then(function(response){
console.log(response);
});
})
Run Code Online (Sandbox Code Playgroud)
在这种情况下,$ timeout和$ interval有什么不同?
我感谢所有的帮助!
我有一个非常简单的例子
(也可以在这个小提琴上找到:http://jsfiddle.net/depov5w6/)
我有2个工厂,一个返回一个具有属性'data'的对象(绑定到控制器的范围),另一个工厂有两个方法:populateData和pushData.populateData将dataSource.data的值设置为新值.pushData将一个新值推送到dataSource.data
angular.module("app",[])
.factory('dataSource', function() {
return {
data: ["Init Data"]
};
})
.factory('dataModifier', function(dataSource) {
return {
populateData: function() {
dataSource.data = ["data from populateData"];
},
pushData: function() {
dataSource.data.push("new data from push data");
}
}
})
.controller('dataCtrl', function($scope, dataSource, dataModifier) {
$scope.data = dataSource.data;
$scope.populateData = dataModifier.populateData;
$scope.pushData = dataModifier.pushData;
})
Run Code Online (Sandbox Code Playgroud)
在我看来,我有一个调用pushData的按钮和另一个调用populateData的按钮.我还显示$ scope.data
<div ng-app="app">
<div ng-controller="dataCtrl" class="container">
<p>Data: {{data}}</p>
<button ng-click="pushData()">Push Data</button>
<button ng-click="populateData()">Set Data To New Value</button>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
如果您查看小提琴,如果单击"推送数据"按钮,新值将被推送到阵列上.但是,如果单击"将数据设置为新值",则不会发生任何事情,并且后续单击以推送数据不会执行任何操作.我想我明白,当你点击填充数据时,你会丢失对$ scope.data绑定的数组的引用,但为什么$ …