从外部呼叫控制器功能

时间:2015-02-19 19:15:39

标签: javascript angularjs

我需要从外部访问(调用和/或修改)控制器的范围 在this answer之后,我设法访问了范围,但数据绑定没有启动......

以此为例(JSFiddle)。

angular.module("App", []).controller("Test", function($scope)
{
    $scope.list = ["added on initialization"];

    $scope.add = function(item)
    {
        $scope.list.push(item);
    };
});

var addFromOutside = function()
{
    angular
        .element(document.getElementById("TestController"))
        .scope()
        .add('added from outside');
};
<div ng-app="App" ng-controller="Test" id="TestController">
    <ul>
        <li ng-repeat="item in list track by $index">
            {{item}}
        </li>
    </ul>

    <button ng-click="add('added from inside')">Add from inside</button>
</div>

<button onclick="addFromOutside()">Add from outside</button>

如果您点击“从内部添加”按钮,它就会像预期的那样工作 但是,如果您点击“从外部添加”按钮,则在点击“从内部添加”按钮之前没有任何操作...

无论如何都有这样做并且数据绑定有效吗?

1 个答案:

答案 0 :(得分:2)

你忘了添加

scope.$apply()

http://jsfiddle.net/o2b0bdbr/ 你在angularjs消化周期之外,所以你需要让他知道他的范围发生了什么事情