小编bin*_*nce的帖子

打字稿:如何定义嵌套对象的接口?

假设我有一个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)

typescript

68
推荐指数
2
解决办法
4万
查看次数

关于$ interval返回的承诺如何与Angular中的$ timeout进行比较的混淆

我有一个问题,了解$ 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有什么不同?

我感谢所有的帮助!

intervals angularjs angularjs-service

3
推荐指数
1
解决办法
4671
查看次数

修改了绑定到控制器范围的工厂中的数据,它不会更新

我有一个非常简单的例子

(也可以在这个小提琴上找到: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绑定的数组的引用,但为什么$ …

javascript angularjs angularjs-scope angularjs-factory

1
推荐指数
1
解决办法
753
查看次数