因此有两个需要共享数据的指令。两者都在同一个控制器下,因此设置变量$ 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);
};
这会在每分钟左右开始,并始终将值返回到原始值。我缺少什么
答案 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);
正如我所提到的,我不确定这是否正确,或者我的理解是否正确,但它是否有效:)