Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.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
Javascript 单击“角度”复选框时更新不相关字段_Javascript_Angularjs_Checkbox_Angularjs Ng Change - Fatal编程技术网

Javascript 单击“角度”复选框时更新不相关字段

Javascript 单击“角度”复选框时更新不相关字段,javascript,angularjs,checkbox,angularjs-ng-change,Javascript,Angularjs,Checkbox,Angularjs Ng Change,我有一个人员的复选框列表,我需要触发一个事件,该事件将显示在视图的另一个区域中选定的每个人员的信息。我正在让事件在我的控制器中运行,并更新员工信息数组。但是,视图不会使用此信息进行更新。我认为这可能是某种范围问题,但找不到任何有效的方法。我尝试添加一块$watch,我的代码似乎认为它已经在运行了。我还尝试添加一个指令,但其中似乎没有任何东西能使这项工作变得更好。我对Angular非常、非常陌生,不知道在这方面向何处寻求帮助 我的看法包括: <div data-ng-controller="

我有一个人员的复选框列表,我需要触发一个事件,该事件将显示在视图的另一个区域中选定的每个人员的信息。我正在让事件在我的控制器中运行,并更新员工信息数组。但是,视图不会使用此信息进行更新。我认为这可能是某种范围问题,但找不到任何有效的方法。我尝试添加一块$watch,我的代码似乎认为它已经在运行了。我还尝试添加一个指令,但其中似乎没有任何东西能使这项工作变得更好。我对Angular非常、非常陌生,不知道在这方面向何处寻求帮助

我的看法包括:

<div data-ng-controller="staffController as staffCtrl" id="providerList" class="scrollDiv">
    <fieldset>
        <p data-ng-repeat="person in staffCtrl.persons">
            <input type="checkbox" name="selectedPersons" value="{{ physician.StaffNumber }}" data-ng-model="person.isSelected"
               data-ng-checked="isSelected(person.StaffNumber)" data-ng-change="staffCtrl.toggleSelection(person.StaffNumber)" />
            {{ person.LastName }}, {{ person.FirstName }}<br />
        </p>
    </fieldset>
</div>
<div data-ng-controller="staffController as staffCtrl">
    # of items: <span data-ng-bind="staffCtrl.infoList.length"></span>
    <ul>
        <li data-ng-repeat="info in staffCtrl.infoList">
           <span data-ng-bind="info.staffInfoItem1"></span>
        </li>
    </ul>
</div>
function getStaffInfo(staffId, date) {
    staffService.getStaffInfoById(staffId)
        .then(success)
        .catch(failed);
    function success(data) {
        if (!self.infoList.length > 0) {
           self.infoList = [];
        }
        var staffItems = { staffId: staffNumber, info: data };
        self.infoList.push(staffItems);
    }
    function failed(err) {
        self.errorMessage = err;
    }
}
self.toggleSelection = function toggleSelection(staffId) {
    var idx = self.selectedStaff.indexOf(staffId);

    // is currently selected
    if (idx >= 0) {
        self.selectedStaff.splice(idx, 1);
        removeInfoForStaff(staffId);
    } else {
        self.selectedStaff.push(staffId);
        getStaffInfo(staffId);
    }
};

提前谢谢

在您发布的代码中,有两个主要问题。一个在模板中,一个在控制器逻辑中

您的模板如下所示:

<div data-ng-controller="staffController as staffCtrl" id="providerList" class="scrollDiv">
    <!-- ngRepeat where you select the persons -->
</div>
<div data-ng-controller="staffController as staffCtrl">
    <!-- ngRepeat where you show persons info -->
</div>
if (!self.infoList.length > 0) {
    self.infoList = [];
}
你可能是说:

if (!self.infoList) {
    self.infoList = [];
}
可以改写为:

self.infoList = self.infoList || [];

谢谢就这样。我这样做是因为页面的不同部分使用不同的控制器。两个部分恰好使用相同的控制器,但由使用不同控制器的部分分隔。是否可以一次初始化两个控制器?不,似乎只有第一个被实例化:。但实际上,使用两个不同的控制器来控制视图的同一部分没有多大意义。staffController必须包装选择列表和显示列表,并且嵌套第二个控制器绝对没有问题,第二个控制器控制选择列表和显示列表之间视图的一部分。