ngModel和重置值

时间:2016-04-21 15:00:49

标签: angularjs

因此有两个需要共享数据的指令。两者都在同一个控制器下,因此设置变量$ scope.selection来存储选择,它在控制器中得到一个默认值。

knowledge.controller('industryController', function($scope, mwFactory){
    $scope.menudata={sections: [
            {group: 'FMP', name: 'Finance'},
            {group: 'FinTech', name: 'Financial Technology'},
        ]
    }
    if ($scope.selection) {
        console.log("This is " + $scope.selection)
    } else {
        $scope.selection = 'Main_Page'
    }
})

然后我将其发送到您可以进行选择的菜单

<nav-circle group="section.group" ng-model="selection"></nav-circle>

然后我在指令

中设置如下
            function nodeclick(d){
                //console.log("Name is " + d.url);
                console.log("Old model is " + ngModel.$modelValue)
                ngModel.$modelValue = d.url;
                ngModel.$viewValue = d.url;
                console.log("New model is " + ngModel.$modelValue)
            }

但是,它似乎没有更新,甚至可能更奇怪,有些东西正在重置ngModel。 进一步打电话,

ngModel.$render = function () {
    console.log("ngRender got called " + ngModel.$modelValue);

};

这会在每分钟左右开始,并始终将值返回到原始值。我缺少什么

1 个答案:

答案 0 :(得分:0)

好吧,这可能不是最好的方法,但它有效,有时这就足够了。)

而不是发送变量我发送了一个对象,而且我认为(更好地了解angular和javascript的人可能能够解释/确认)这意味着该指令将写入内存地址而不是变量。这也意味着ng-model不会改变(内存地址相同,存储在该内存地址的数据也会改变)。

可能是错的,但解决方案就好像是这样。

因此,定义范围变量:

$scope.selection = {};
$scope.selection.default = 'Main_Page'
$scope.selection.current = '';

然后将以下内容发送到指令:

<nav-circle group="section.group" ng-model="selection.current"></nav-circle>

要更改指令中的范围变量,只需设置viewValue

即可
ngModel.$setViewValue(d.url);

正如我所提到的,我不确定这是否正确,或者我的理解是否正确,但它是否有效:)