简体   繁体   English

带Typescript的javascript函数中的Angular Scope

[英]Angular Scope in javascript function with Typescript

I use Typescript with Angular and Breezejs. 我将Typescript与Angular和Breezejs一起使用。

class CounterController {
    count: number = 0;
    static $inject = ['$scope'];


    constructor($scope) {
        $scope.vm = this;
    }

    setCount14(): void {  
        this.count = 14; // works
    }

    getQuestions(): void {
        var manager = new breeze.EntityManager('/breeze/dbentities');
        var query = breeze.EntityQuery.from("Corporations").where("Name", "startsWith", "Zen");
        manager.executeQuery(query)
            .then(querySucceeded);

        function querySucceeded(data) {
            this.count= 1; // works not!
        }
    }
}

How can i access the count property in the querySucceeded function correct? 我如何才能正确访问querySucceeded函数中的count属性?

Edit: better: there must be a way to pass a typescript function to executeQuery(query).then ? 编辑:更好:必须有一种方法可以将Typescript函数传递给executeQuery(query).then

Solution: Pass Typescript function as a Javascript function 解决方案:将Typescript函数作为Javascript函数传递

Then calling the scope.$apply() does apply the bindings. 然后调用scope.$apply()会应用绑定。

use (data) => { this.count = 1; } 使用(data) => { this.count = 1; } (data) => { this.count = 1; } instead. (data) => { this.count = 1; } or your "this" won't have the correct scope. 否则您的“ this”将没有正确的范围。 OR as an alternative: 或作为替代:

var me = this;
function querySucceeded(data) {
  me.count= 1; // works not!
} 

eg: 例如:

getQuestions(): void {
    var manager = new breeze.EntityManager('/breeze/dbentities');
    var query = breeze.EntityQuery.from("Corporations").where("Name", "startsWith", "Zen");
    manager.executeQuery(query)
        .then((data) => { this.count= 1; });
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM