当前位置: 首页 > 面试题库 >

如何使用TypeScript Controller和Angular Js绑定数据

杨慎之
2023-03-14
问题内容

我正在使用Type Script。我已经将我的angular js控制器转换为Type Script,但是我面临ng-repeater中的问题。(我在下面附加了我的控制器代码:

class CustomCtrl{
    public customer;
    public ticket;
    public services;
    public cust_File;
    public ticket_file;
    public service_file;

    static $inject = ['$scope', '$http', '$templateCache'];
    constructor (
            private $http,
            private $templateCache
    ){}

问题答案:

我决定添加另一个答案,以描述更多详细信息,如何在其中创建和使用控制器 TypeScript 以及如何将其注入 angularJS

这是这个答案的扩展

如何使用TypeScript定义控制器?我们也有一个工作的朋克

所以有这个指令:

export class CustomerSearchDirective implements ng.IDirective
{
    public restrict: string = "E";
    public replace: boolean = true;
    public template: string = "<div>" +
        "<input ng-model=\"SearchedValue\" />" +
        "<button ng-click=\"Ctrl.Search()\" >Search</button>" +
        "<p> for searched value <b>{{SearchedValue}}</b> " +
        " we found: <i>{{FoundResult}}</i></p>" +
        "</div>";
    public controller: string = 'CustomerSearchCtrl';
    public controllerAs: string = 'Ctrl';
    public scope = {};
}

我们可以看到,我们宣布这个指令可作为 ê 字元素。我们还内联了一个 模板 。此模板已准备好绑定 SearchedValue
并在我们的控制器上调用Action Ctrl.Search() 。我们说的是控制器的名称:“CustomerSearchCtrl”,并要求运行时使其以“ Ctrl”形式提供 (conrollerAs :)

最后,我们将该对象注入角度模块:

app.directive("customerSearch", [() => new CustomerSearch.CustomerSearchDirective()]);

我们可以使用$scopeas ng.IScope,但是要对其进行更多类型的访问,我们可以创建自己的 接口

export interface ICustomerSearchScope  extends ng.IScope
{
    SearchedValue: string;
    FoundResult: string;
    Ctrl: CustomerSearchCtrl;
}

这样,我们知道,我们有了string SearchedValue以及另一个string
FoundResult。我们还通知应用程序Ctrl将被注入该范围,并且类型为CustomerSearchCtrl。控制器来了:

export class CustomerSearchCtrl
{
    static $inject = ["$scope", "$http"];
    constructor(protected $scope: CustomerSearch.ICustomerSearchScope,
        protected $http: ng.IHttpService)
    {
        // todo
    }
    public Search(): void
    {
        this.$http
            .get("data.json")
            .then((response: ng.IHttpPromiseCallbackArg<any>) =>
            {
                var data = response.data;
                this.$scope.FoundResult = data[this.$scope.SearchedValue]
                    || data["Default"];
            });
    }
}

加上其注册到模块

app.controller('CustomerSearchCtrl',  CustomerSearch.CustomerSearchCtrl);

这个控制器有什么有趣的地方?它有一个公共actonSearch,可以通过this.例如访问其所有膜this.$http。因为我们在VS中指示了智能感知,即angular.d.ts类型/接口

protected $http: ng.IHttpService

将被使用,我们以后可以轻松地访问其方法。类似的是返回值的类型.then()

.then((response: ng.IHttpPromiseCallbackArg<any>) => {...

其中确实包含数据:任何类型的{} …

希望对您有所帮助,请注意此处所有操作



 类似资料:
  • 问题内容: 数据绑定在框架中如何工作? 我尚未在其网站上找到技术细节。数据从视图传播到模型时,或多或少地清楚了它是如何工作的。但是,AngularJS如何在没有设置者和获取者的情况下跟踪模型属性的变化? 我发现有些JavaScript观察程序可以完成这项工作。但是Internet Explorer 6和Internet Explorer 7不支持它们。那么AngularJS如何知道我更改了以下内容

  • 问题内容: 我需要将动态参数传递给applet。 这是我的控制器: 这是我的观点,参数base64在控制器中定义为“ abcd” 当我运行页面时,我在p标签中看到字符串’abcd’,但是applet参数的值只是“ {{base64}}”。 我该如何解决? 问题答案: 我解决了传递整个applet声明的问题。这样,它可以正常工作。 控制器: 视图:

  • 我试图遵循官方google文档https://developer.android.com/tools/data-binding/guide.html中的数据绑定示例 只是我试图将数据投标应用于一个片段,而不是一个活动。 我当前在编译时遇到的错误是 我怀疑不知道它应该绑定到哪个布局文件-因此出现错误。有什么建议吗?

  • 问题内容: 我知道这是一个古老且可以回答100次的问题,但是随着最新版本的发布,事情变得越来越复杂,因此引起了我很多困惑。我想知道在指令中为属性声明数据绑定的四种当前可用方法之间的区别是什么。特别: 文字装订 双向装订 方法绑定(尽管有人称它为单向绑定) 单向绑定 我对最后两个之间的差异特别感兴趣,因为它们似乎具有重叠的功能,而且我真的无法说出它们之间的差异和优势。 问题答案: 这是有关隔离范围的

  • 问题内容: 使AngularJS与其他JavaScript-MVC框架区分开的一件事是,它能够使用绑定将JavaScript中的绑定值回传到HTML。当您为$ scope变量分配任何值时,Angular会“自动”执行此操作。 但是,这有多自动化?有时,Angular不会接受更改,因此我需要调用$ scope。$ apply()或$ scope。$ digest()来通知angular来获取更改。有

  • 问题内容: 我有几个复选框: 我想绑定到控制器中的列表,以便每当更改复选框时,控制器都维护所有检查值的列表,例如。 ng-model似乎只能将一个复选框的值绑定到控制器中的变量。 还有另一种方法可以使四个复选框绑定到控制器中的列表吗? 问题答案: 有两种方法可以解决此问题。使用简单数组或对象数组。每个解决方案都有其优缺点。您会在下面找到每种情况的一种。 用简单的数组作为输入数据 HTML可能如下所