Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 不使用ng change from指令从select更新父范围_Angularjs_Select_Scope_Parent_Ng Options - Fatal编程技术网

Angularjs 不使用ng change from指令从select更新父范围

Angularjs 不使用ng change from指令从select更新父范围,angularjs,select,scope,parent,ng-options,Angularjs,Select,Scope,Parent,Ng Options,我已经看过几篇关于这方面的文章,但仍然无法理解 我无法从指令中的更新父范围。我读过一些文章,说范围值不应该是原始的,而应该是一个对象,但仍然不明白为什么这不起作用 angular.module('moduleMihai').controller('someController', ['$scope', '$http', function ($scope, $http) { $scope.durations = [{ field:

我已经看过几篇关于这方面的文章,但仍然无法理解

我无法从指令中的更新父范围。我读过一些文章,说范围值不应该是原始的,而应该是一个对象,但仍然不明白为什么这不起作用

angular.module('moduleMihai').controller('someController',
    ['$scope', '$http', function ($scope, $http) {

            $scope.durations = [{
                field: 'yearly',
                title: 'Yearly'
            }, {
                field: 'monthly',
                title: 'Monthly'
            }, {
                field: 'weekly',
                title: 'Weekly'
            }];
            $scope.selectedDuration = $scope.durations[0];

            $scope.handleDurationSelection = function () {
                console.log($scope.selectedDuration.field + ' selected');
                $scope.someData.title[0] = "SOMETHING ELSE!!";
            };


            $scope.someData= {
                title: ['Value1', 'Value2', 'Value3'] };
}]);
指令中没有任何内容:

angular.module("awaCommon").directive("durationSelection", [
    function () {
        return { 
            scope: {}, // tried removing this as well as seen in some articles 
            restrict: "E",
            templateUrl: "duration-selection.html",
            link: function ($scope, $element, $attr) {
            }
        }
    }
]);
下面是duration-selection.html,其中包含选择:

<div ng-controller="someController">
<div>
    Child: {{someData.title[0]}}
    <select
        ng-options="item.title for item in durations"
        ng-model="selectedDuration"
        ng-change="handleDurationSelection()">
    </select>
</div>

子项:{{someData.title[0]}

因此,当选择该值时,上面的子项:{{someData.title[0]}中的该值将正确更新。但是这里的主路由中的-Parent:{{someData.title[0]}}不是:

<div ng-controller="someController">
<div>
    Parent: {{someData.title[0]}}
    <duration-selection></duration-selection>
</div>

父项:{{someData.title[0]}


我需要更新父范围,以便更新不同的指令

根据指令交互和更新父范围的方法是使用

  • 事件处理(emit和broadcast):因此,当child指令发生更改时,我们会向父级发出警报,然后父级侦听事件由于某些不良方面,我建议尽量少用
  • 传递函数的指令属性:我们将要处理的函数传递给指令,以便在需要时从指令处理或调用它(对我来说是最好的方法)
  • 在更新$scope.$parent.lngBusinessUnit的指令内,无需再次将函数传递给该指令,无需这样做。因为指令是处理逻辑的指令。我们只是直接向上更新父级
  • 在父指令上使用$watch帮助检查所选持续时间的更改:这非常简单,因为我们在指令设置的return->scope“=”中使用双向绑定将ngModel映射到指令的传递参数
上述每种可能性的示例

  • 事件处理
angular.module(“eventTest”,[])
.controller(“mainCtrl”,函数($scope){
console.log(“我在这里”);
$scope.parentValue=“测试”;
$scope.valueToPass=[“男性”、“女性”];
//让我们看一下更新的内容
$scope.$on('childUpdated',函数(事件,值){
$scope.parentValue=值;
log(“从子指令更新”,值);
});
})
.指令(“子”,函数(){
返回{
限制:'E',
范围:{
valueToPass:“=”
},
templateUrl:“child.html”,
控制器:功能($scope){
//此方法在更改valueToPass的选择时触发
$scope.childChanges=函数(值){
$scope.$emit('childUpdated',值);
log(“发出此消息的子对象:”,值);
}
}
}
});

事件测试仅针对您的情况,建议您仔细阅读
父项:{{parentValue}}

子值:{{menu}}
{{item}}
从指令中交互和更新父范围的方法是使用

  • 事件处理(emit和broadcast):因此,当child指令发生更改时,我们会向父级发出警报,然后父级侦听事件由于某些不良方面,我建议尽量少用
  • 传递函数的指令属性:我们将要处理的函数传递给指令,以便在需要时从指令处理或调用它(对我来说是最好的方法)
  • 在更新$scope.$parent.lngBusinessUnit的指令内,无需再次将函数传递给该指令,无需这样做。因为指令是处理逻辑的指令。我们只是直接向上更新父级
  • 在父指令上使用$watch帮助检查所选持续时间的更改:这非常简单,因为我们在指令设置的return->scope“=”中使用双向绑定将ngModel映射到指令的传递参数
上述每种可能性的示例

  • 事件处理
angular.module(“eventTest”,[])
.controller(“mainCtrl”,函数($scope){
console.log(“我在这里”);
$scope.parentValue=“测试”;
$scope.valueToPass=[“男性”、“女性”];
//让我们看一下更新的内容
$scope.$on('childUpdated',函数(事件,值){
$scope.parentValue=值;
log(“从子指令更新”,值);
});
})
.指令(“子”,函数(){
返回{
限制:'E',
范围:{
valueToPass:“=”
},
templateUrl:“child.html”,
控制器:功能($scope){
//此方法在更改valueToPass的选择时触发
$scope.childChanges=函数(值){
$scope.$emit('childUpdated',值);
log(“发出此消息的子对象:”,值);
}
}
}
});

事件测试仅针对您的情况,建议您仔细阅读
父项:{{parentValue}}

子值:{{menu}}
{{item}}
对于角度v1,使用
angularjs
标记。
angular
标记用于angular v2+。这样你会吸引适当观众的注意。好的,谢谢。对于AngularV1,使用
angularjs
标记。
angular
标记用于angular v2+。这样你会吸引适当观众的注意。好的,当然可以,谢谢。实际上还有一个问题。例如,我可以用它来更新父级的父级吗?上面没有你的评论,请说得有点明确。对不起,例如,如果我有嵌套指令,每个指令都有自己的控制器/作用域。实际上还有一个问题。例如,我可以用它来更新父级的父级吗?没有收到上面的评论,请稍显抱歉,例如,如果我有嵌套指令,每个指令都有自己的控制器/作用域。