Javascript 无法访问指令中的父范围,它';是只读的

Javascript 无法访问指令中的父范围,它';是只读的,javascript,angularjs,Javascript,Angularjs,首先,我发现我无法更改指令中的值 因此,我必须使用$scope.$applyAsync修改快速搜索\u ctrl控制器的作用域 并使用$scope.$watch启用双向绑定 我是Angular.js的新手, 我认为将更新逻辑放在指令中是奇怪的,不是直观的 如何将逻辑放入快速搜索\u ctrl? 为什么我不能只通过$scope.slider\u status.修改值,而是需要在applyAsync中包装操作 我对指令和控制器有没有做错什么 谢谢 main.js 快速搜索\u ctrl.js ion

首先,我发现我无法更改
指令中的值

因此,我必须使用
$scope.$applyAsync
修改快速搜索\u ctrl控制器的作用域

并使用
$scope.$watch
启用双向绑定

我是Angular.js的新手, 我认为将更新逻辑放在指令中是奇怪的,不是直观的 如何将逻辑放入
快速搜索\u ctrl
? 为什么我不能只通过
$scope.slider\u status.修改值,而是需要在applyAsync中包装操作

我对指令和控制器有没有做错什么

谢谢

main.js 快速搜索\u ctrl.js ionslider.js
您必须使用
true
作为
$watch
中的第三个参数:

$scope.$watch('slider_status', function() {
    // change the parent's model here
}, true);
因为您试图观察对象,所以需要
deep
watch。 查看有关它的更多信息$rootScope.Scope

quick_search_app.controller('quick_search_ctrl',
  ...
  $scope.slider_status = {from: "test"};
});
quick_search_app.directive('ionslider',function(){
    return{
        restrict:'AE',
        scope: false,
        controller: 'quick_search_ctrl',
        link:function($scope, $element){
            $($element).ionRangeSlider({
                    onChange: function(slider) {
                        $scope.$applyAsync(function(){
                            $scope.slider_status.from = slider.from;
                        });
                        $scope.$watch('slider_status', function() {
                            // change the parent's model here
                        });
                    }
            })
        }
    }
});
$scope.$watch('slider_status', function() {
    // change the parent's model here
}, true);