$ scope变量不断变化

时间:2017-03-23 13:26:16

标签: javascript angularjs angularjs-scope angular-material

我遇到的问题是我的变量$scope.test在不断变化。

首先我在node.js服务器上有一个函数,它返回一个json对象,如下所示:

{
    objectOne: "some text",
    objectTwo: "more text",
    objectThree: {
        text: "important text",
        inf: "some info"
    },
    objectFour: "even more text"
}

然后在角度我有一个控制器。 (此控制器用于2个html模板。不确定是否重要)。所以对于控制器中的功能:

$scope.start = function () {
    $location.path('/start');
    SomeService.start({}, someVar, function (success, msg, t) {
        if (!success) {
            console.error(msg);
        }

        $scope.test = t;
        console.log($scope.test); //this prints out the json object above
    });
};

然后我有一个模板文件test.html:

<div>
    <md-card>
        <md-card-title>
            <md-card-title-text>
                <span class="md-headline">{{test.objectThree.text}}</span>
            </md-card-title-text>
        </md-card-title>
        <md-card-actions layout="row" layout-align="end center">
            <md-button>Cancel</md-button>
        </md-card-actions>
    </md-card>
</div>

问题在于它没有显示文字。所以我在控制器中创建了另一个函数,每100ms记录一次$scope.test

$interval(function () {
    console.log($scope.test);
}, 100);

现在奇怪的是它打印出如下例子:

Object {
        objectOne: "some text",
        objectTwo: "more text",
        objectThree: {
            text: "important text",
            inf: "some info"
        },
        objectFour: "even more text"
       }

-

undefined 

-

undefined

这仍在继续。一旦它打印出对象,那么2次未定义。 但是,当我定义一个可修复的$scope.test2 = "test2text" OUTSIDE函数,然后让我的html像这样:

<div>
    <md-card>
        <md-card-title>
            <md-card-title-text>
                <span class="md-headline">{{test2}}</span>
            </md-card-title-text>
        </md-card-title>
        <md-card-actions layout="row" layout-align="end center">
            <md-button>Cancel</md-button>
        </md-card-actions>
    </md-card>
</div>

它起作用并在网站上显示文字,但我不知道为什么。

所以有人知道为什么会这样吗? 如果您需要其他信息,请询问。 感谢您抽出宝贵时间;)

1 个答案:

答案 0 :(得分:2)

不要通过$scope,这是非常棘手的事情,可能会令人困惑。

但是,您可以使用service向控制器提供functions并从中使用它。

请参阅similar problem and workaround