如何将对父对象的引用传递给AngularJS $ resource查询回调函数?

jol*_*ger 3 javascript angularjs

我有一个带范围的AngularJS应用。在此范围内,有一个通过视图显示的Content对象数组。在视图中,对于每个内容,都有一个选择按钮,该按钮连接到对象的方法selectToggle()。

调用此方法时,将创建一个$ resource,它将一些信息发布到API。在$ resource.query回调中,我需要访问父Content对象,但是由于它是异步的,因此我松开了引用(“ this”未指向Window对象)。

如何在回调函数中传递对创建$ resource的对象的引用?

谢谢

function Content (informations) {

    this.selected = false;
    this.spinnerEnabled = false;
    this.error = null;

    this.selectToggle = function () {

        this.spinnerEnabled = true;

        ContentResource = $resource(
            '/en/api/content',
            null,
            {'query': {'method': 'POST', isArray: false}}
        ).query({
            'type':             this.type,
            'extId':            this.id

        }, function (response) {

            // Here this is pointing to Window, not to the Content object
            // so the following set are useless.

            if (response.status == "success") {
                this.selected = ! this.selected;
            } else if (response.status == "error") {
                this.error = response.message;
            } else {
                this.error = "Request failed";
            }

            this.spinnerEnabled = false;
        });
    };
}
Run Code Online (Sandbox Code Playgroud)

Mik*_*sen 5

您可以这样存储对Content对象的引用:

function Content (informations) {
   this.selected = false;
   this.spinnerEnabled = false;
   this.error = null;

   var self = this; // <-- Store reference for use later
   // ...
Run Code Online (Sandbox Code Playgroud)

然后,在回调中,您可以参考self

if (response.status == "success") {
   self.selected = ! self.selected;
} else if (response.status == "error") {
   self.error = response.message;
Run Code Online (Sandbox Code Playgroud)