Angularjs ngModel更改为子作用域

Angularjs ngModel更改为子作用域,angularjs,angular-ngmodel,Angularjs,Angular Ngmodel,当我通过绑定到父控制器作用域的输入字段编辑值时(可能绑定不是正确的术语),它似乎重新绑定到子控制器的作用域。这消除了我在手动编辑输入字段之前使用内置于父作用域中的函数(单击示例中的按钮)影响值的能力 例如: 示例-示例-示例85-生产 angular.element(document.getElementsByTagName('head')).append(angular.element(''); angular.module('inputExample',[]) .controller('E

当我通过绑定到父控制器作用域的输入字段编辑值时(可能绑定不是正确的术语),它似乎重新绑定到子控制器的作用域。这消除了我在手动编辑输入字段之前使用内置于父作用域中的函数(单击示例中的按钮)影响值的能力

例如:


示例-示例-示例85-生产
angular.element(document.getElementsByTagName('head')).append(angular.element('');
angular.module('inputExample',[])
.controller('ExampleController',['$scope',function$scope){
$scope.val='1';
$scope.$watch('val',function(){
警报($scope.val);
});
$scope.set_val=函数(){
$scope.val=2;
}
}])
.controller('childController',['$scope',function($scope){}]);

childController创建一个新的作用域,该作用域通常从ExampleController作用域继承。Angular对原型继承和作用域的使用可能会令人困惑,特别是如果您假设原型继承的行为与其他语言(C#、Java等)中的继承行为相同的话

如果ExampleController.scope.val=2,则输入将用值2初始化,但是,当输入修改值时,它会通过设置

childController.val=2

现在ExampleController.scope和childController.scope都有一个值为2的属性val,但它们是完全独立的,没有绑定在一起

这就是angular建议对模型使用“点符号”的原因

然而,在您的示例中,您的childController看起来是不必要的,删除它将解决您的问题。如果您不能删除它(因为您的实际实现正在使用它做一些事情),那么将您的模型更改为“点”符号

<body ng-app="inputExample">
    <script>
        angular.module('inputExample', [])
           .controller('ExampleController', ['$scope', function($scope) {
                        $scope.data = {};
                        $scope.data.val = '1';

                        $scope.$watch('data.val',function(){
                            alert($scope.data.val);
                        });
                        $scope.set_val = function(){
                            $scope.data.val = 2;      
                        }
            }])
            .controller('childController',['$scope', function($scope){}]);
    </script>
    <form name="testForm" ng-controller="ExampleController">
        <div ng-controller="childController">
            <input ng-model="data.val" />
            <input type="button" ng-click="set_val()" value="change value"/>
        </div>
    </form>
</body>
</html>

angular.module('inputExample',[])
.controller('ExampleController',['$scope',function$scope){
$scope.data={};
$scope.data.val='1';
$scope.$watch('data.val',function(){
警报($scope.data.val);
});
$scope.set_val=函数(){
$scope.data.val=2;
}
}])
.controller('childController',['$scope',function($scope){}]);

正在工作的Plunk。

childController创建一个新的作用域,该作用域原型继承自ExampleController作用域。Angular对原型继承和作用域的使用可能会令人困惑,特别是如果您假设原型继承与其他语言(C#、Java等)中的继承行为相同

如果ExampleController.scope.val=2,则输入将用值2初始化,但是,当输入修改值时,它会通过设置

childController.val=2

现在ExampleController.scope和childController.scope都有一个值为2的属性val,但它们是完全独立的,没有绑定在一起

这就是angular建议对模型使用“点符号”的原因

但是,在您的示例中,您的childController看起来是不必要的,删除它将解决您的问题。如果您无法删除它(因为您的实际实现正在对它进行处理),请将您的模型更改为“点”表示法

<body ng-app="inputExample">
    <script>
        angular.module('inputExample', [])
           .controller('ExampleController', ['$scope', function($scope) {
                        $scope.data = {};
                        $scope.data.val = '1';

                        $scope.$watch('data.val',function(){
                            alert($scope.data.val);
                        });
                        $scope.set_val = function(){
                            $scope.data.val = 2;      
                        }
            }])
            .controller('childController',['$scope', function($scope){}]);
    </script>
    <form name="testForm" ng-controller="ExampleController">
        <div ng-controller="childController">
            <input ng-model="data.val" />
            <input type="button" ng-click="set_val()" value="change value"/>
        </div>
    </form>
</body>
</html>

angular.module('inputExample',[])
.controller('ExampleController',['$scope',function$scope){
$scope.data={};
$scope.data.val='1';
$scope.$watch('data.val',function(){
警报($scope.data.val);
});
$scope.set_val=函数(){
$scope.data.val=2;
}
}])
.controller('childController',['$scope',function($scope){}]);

正在工作的Plunk。

childController创建一个新的作用域,该作用域原型继承自ExampleController作用域。Angular对原型继承和作用域的使用可能会令人困惑,特别是如果您假设原型继承与其他语言(C#、Java等)中的继承行为相同

如果ExampleController.scope.val=2,则输入将用值2初始化,但是,当输入修改值时,它会通过设置

childController.val=2

现在ExampleController.scope和childController.scope都有一个值为2的属性val,但它们是完全独立的,没有绑定在一起

这就是angular建议对模型使用“点符号”的原因

但是,在您的示例中,您的childController看起来是不必要的,删除它将解决您的问题。如果您无法删除它(因为您的实际实现正在对它进行处理),请将您的模型更改为“点”表示法

<body ng-app="inputExample">
    <script>
        angular.module('inputExample', [])
           .controller('ExampleController', ['$scope', function($scope) {
                        $scope.data = {};
                        $scope.data.val = '1';

                        $scope.$watch('data.val',function(){
                            alert($scope.data.val);
                        });
                        $scope.set_val = function(){
                            $scope.data.val = 2;      
                        }
            }])
            .controller('childController',['$scope', function($scope){}]);
    </script>
    <form name="testForm" ng-controller="ExampleController">
        <div ng-controller="childController">
            <input ng-model="data.val" />
            <input type="button" ng-click="set_val()" value="change value"/>
        </div>
    </form>
</body>
</html>

angular.module('inputExample',[])
.controller('ExampleController',['$scope',function$scope){
$scope.data={};
$scope.data.val='1';
$scope.$watch('data.val',function(){
警报($scope.data.val);
});
$scope.set_val=函数(){
$scope.data.val=2;
}
}])
.controller('childController',['$s