javascript - 将更改应用于 angular.js 中由scope.$apply 获取的模型

标签 javascript angularjs

我在 AngularJS 中有一个指令,可以像这样获取数组:

var current_element_list = scope.$apply($(this).attr('sortable-model'));

其余代码如下所示:

//in the controller
$scope.project.elements = [];

//in the html
<customDirective sortable-model='project.elements'>

我认为scope.$apply会返回对$scope.project.elements数组的引用,这样我在指令中所做的任何更改都会保留在该模型中。然而,情况似乎并非如此,因为我对数组所做的任何更改都不会保存。无论如何,我是否可以将通过 sortable-model 属性获得的更改保存回根范围中的数组?

最佳答案

如果您希望指令和 Controller 作用域之间进行双向绑定(bind),则应在定义指令时使用 scope 属性。

var app = angular.module("app", []);

app.controller("Ctrl", function ($scope) {
    $scope.project = {
        elements: [1, 2, 3]
    };
});

app.directive("customDirective", function () {
    return {
        restrict: "E",
        scope: {
            sortableModel: "="
        },
        link: function (scope, element, attrs) {
            // Access the controller's scope.project.elements here as scope.sortableModel
            console.log(scope.sortableModel);

            // Changes to scope.sortableModel will also affect the controller's scope.project.elements
            scope.sortableModel.push(4);
        }
    };
});

查看working fiddle in action .

关于javascript - 将更改应用于 angular.js 中由scope.$apply 获取的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17979377/

相关文章:

javascript - 从字符串中提取 5 个字符后的文本且没有最后一个斜杠

javascript - 使用 testcafe 在 Javascript 中断言数组列表

javascript - 隐藏然后显示基于选择值的 HTML

javascript - 如何处理使用 v-on :change? 隐藏的输入

javascript - angularjs滚动以在ng-repeat中反击

javascript - jquery的打印方法不在打印屏幕上显示颜色

javascript - jquery datepicker 图标拉伸(stretch)

javascript - 在 HTML 表格上拖动选择(带有 colspan/rowspan 的正方形/矩形部分)

javascript - 使用 Angular 触发列表第一个元素上的单击事件

javascript - 范围不应该被隔离吗?